可能重复:
Pass a list-structure as an argument to a stored procedure
我有一个包含多个逗号分隔值的会话变量。我使用Split函数将这些值存储在数组中。现在我需要将此数组传递给存储过程。这是可能的,如果是,我该如何使用它存储过程中的数组?
答案 0 :(得分:1)
如果您使用的是Sql Server 2008,请尝试将其作为表值参数传递:
答案 1 :(得分:0)
之前我遇到过这个完全相同的情况,这就是我所做的:
不是将变量拆分为代码中的数组,而是将整个逗号分隔文本字符串作为nvarchar传递给存储过程。然后我创建了一个数据库函数,它接受传入的值和分隔符,并返回分割值的表。见下文......
CREATE FUNCTION [dbo].[split]
(
@DataToSplit NVARCHAR(MAX),
@Delimiter NVARCHAR(5)
)
RETURNS @ReturnVal AS TABLE
(
ID INT IDENTITY(1, 1),
Item NVARCHAR(200)
)
AS
BEGIN
WHILE (CHARINDEX(@DELIMITER, @DataToSplit) > 0)
BEGIN
INSERT INTO @ReturnVal
(
Item
)
VALUES
(
SUBSTRING(@DataToSplit, 1, CHARINDEX(@Delimiter, @DataToSplit) - 1)
)
SET @DataToSplit = SUBSTRING(@DataToSplit, CHARINDEX(@Delimiter, @DataToSplit) + 1, LEN(@DataToSplit))
END
-- Grab the last item of the separated list of items
INSERT INTO @ReturnVal
(
Item
)
VALUES
(
@DataToSplit
)
RETURN
END
一旦你创建了split函数,你就可以在存储过程中使用它来传递分隔文本并以各种方式使用它,例如......
CREATE PROCEDURE [dbo].[ExampleProc]
@Values NVARCHAR(MAX)
AS
SET NOCOUNT ON;
SELECT Item
FROM [dbo].[split](@Values, ',')
-- OR
SELECT Item
FROM [dbo].[SomeTable]
WHERE Item IN
(
SELECT Item FROM [dbo].[split](@Values, ',')
)
-- OR
SELECT a.Item
FROM [dbo].[SomeTable] AS a
INNER JOIN [dbo].[split](@Values, ',') AS b
ON a.ID = b.ID
GO