我的.NET应用程序中有一个函数,需要搜索未知数量的参数。
例如:select * from tbl where x=1 or x=2 or x=3 or x=4
可以在.NEt和SQL中进行吗?我如何在.NET中创建动态参数(我想用循环来做)但是我如何在我的存储过程中声明它们? sql有数组吗?
请帮忙。
谢谢你!答案 0 :(得分:3)
您可能希望查看表值参数(SQL Server 2008及更高版本):
答案 1 :(得分:2)
您可以传入逗号分隔列表,使用表函数将其拆分为表,然后使用IN子句。 This article过去了。
表函数:
CREATE FUNCTION dbo.funcListToTableInt(@list as varchar(8000), @delim as varchar(10))
RETURNS @listTable table(
Value INT
)
AS
BEGIN
--Declare helper to identify the position of the delim
DECLARE @DelimPosition INT
--Prime the loop, with an initial check for the delim
SET @DelimPosition = CHARINDEX(@delim, @list)
--Loop through, until we no longer find the delimiter
WHILE @DelimPosition > 0
BEGIN
--Add the item to the table
INSERT INTO @listTable(Value)
VALUES(CAST(RTRIM(LEFT(@list, @DelimPosition - 1)) AS INT))
--Remove the entry from the List
SET @list = right(@list, len(@list) - @DelimPosition)
--Perform position comparison
SET @DelimPosition = CHARINDEX(@delim, @list)
END
--If we still have an entry, add it to the list
IF len(@list) > 0
insert into @listTable(Value)
values(CAST(RTRIM(@list) AS INT))
RETURN
END
GO
然后您的存储过程可以执行此操作:
SELECT *
FROM tbl
WHERE id IN (
SELECT Value
FROM funcListToTableInt(@ids,',')
)
答案 2 :(得分:0)
尝试传入XML列表作为参数,然后您可以使用游标或类似的东西处理XML列表中的项目