作者:王德筠宛吟玟华 | 来源:互联网 | 2023-09-14 11:36
CREATE PROCEDURE asp_cpbselect
@ProductList
AS
--select all data
SELECT cpid,cpbm,class1,cpmc,sjg,yhj,gb,pp FROM cpb where Where cpbm IN (@ ProductList) Order By cpid
GO
以上语句中@productlist是一个数组变量,应该怎么声明这个变量?而上面的SQL语句应该怎么写??
我是新手,请多多指教!
11 个解决方案
SQL 中不能声名数组,不过你可以用定义的表来代替。
SQL 中不能声名数组,你可以用临时表来代替。
如下面的临时表格式:
1,aaa
2,cccc
3,ccc
4,dddd
实在不知道该如何下手,我是用ASP设计程序,其中ProductList是数组:
sql = "Select cpid,cpbm,class1,cpmc,sjg,yhj,gb,pp From cpb"
sql = sql & " Where cpbm In (" & ProductList & ")"
sql = sql & " Order By cpid"
现在该如何写这一存储过程?
USE NorthWind
create table #tmp(ID int)
insert #tmp values(10248)
insert #tmp values(10249)
insert #tmp values(10250)
insert #tmp values(10251)
select * from #tmp
go
CREATE PROCEDURE asp_cpbselect
AS
--select all data
SELECT OrderID,CustomerID,EmployeeID,OrderDate,RequiredDate,ShippedDate,ShipVia,Freight
FROM Orders Where OrderID IN (SELECT * FROM #tmp) Order By OrderID
GO
EXEC asp_cpbselect
CREATE PROCEDURE asp_cpbselect
@ProductList varchar(8000)
AS
exec('SELECT cpid,cpbm,class1,cpmc,sjg,yhj,gb,pp FROM cpb where Where cpbm IN ('+@ ProductList+') Order By cpid')
GO
--调用
exec asp_cpbselect '''aa'',''bb'',''cc'''
--或:
exec asp_cpbselect '1,2,3,5'
在asp里参数的形式: "'aa','bb','cc'"
将@productlist以一个字符串的形式传入存储过程,然后进行字符串分割,插入到临时表,然后实现select 查询
将@productlist以一个字符串的形式传入存储过程,然后进行字符串分割,插入到临时表,然后实现select 查询
这是好方法,可以用“,”或空格符作为分割点,Vbscript里有SPLIT这个函数,请问SQL SERVER怎样分割并插入临时表?
TO:yoki(小马哥)和gaobochina(皮皮)
=================================
将@productlist以一个字符串的形式传入存储过程,然后进行字符串分割,插入到临时表,然后实现select 查询
=================================
我觉得能这样做是最好的,怎么实现呢?