2
在SQL Server中运行以下内容的正确方法是什么?将多个值传递给存储过程
Execute myStore @dept='dept1',@dept='dept2'
或
Execute myStore @dept in ('dept1','dept2')
在SQL Server中运行以下内容的正确方法是什么?将多个值传递给存储过程
Execute myStore @dept='dept1',@dept='dept2'
或
Execute myStore @dept in ('dept1','dept2')
你可以参照这个article。有5种方法,可以在其中实现它:
方法#1 - 传递一个CSV:字符串列表作为参数传递给一个(N)VARCHAR数据类型的参数,然后分割/解析它的SP内部 或UDF,check here。
方法#2 - 将XML:字符串作为XML数据类型参数传递。我们需要解析SP中的XML,check here。
方法#3 - 使用临时表:在执行之前创建的SP内部。这里没有必要通过任何 参数与SP,check here。
方法#4 - 使用台湾居民入境许可证:在SQL Server 2008及以上版本,您可以创建或台湾居民入境许可证表值参数,并通过使用 用户定义的表类型声明它们。然后可以使用这些TVP将多个数据行发送到SP或UDF,而不创建临时表或多个参数check here参数 。
方法#5 - 传递JSON字符串:作为NVARCHAR数据类型参数。我们需要解析SP中的JSON,check here。
例如从linked source方法1例如:
-- As always I will use the AdventureWorks database<img width="16" height="16" class="wp-smiley emoji" draggable="false" alt=":)" src="https://s1.wp.com/wp-content/mu-plugins/wpcom-smileys/simple-smile.svg" style="height: 1em; max-height: 1em;">
USE [AdventureWorks2012]
GO
-- Create an SP with NVARCHAR(MAX) parameter:
CREATE PROCEDURE uspGetPersonDetailsCSV (
@persons NVARCHAR(MAX)
)
AS
BEGIN
--DECLARE @persons NVARCHAR(MAX)
--SET @persons = 'Charles,Jade,Jim,Luke,Ken'
SELECT T.C.value('.', 'NVARCHAR(100)') AS [Name]
INTO #tblPersons
FROM (SELECT CAST ('<Name>' + REPLACE(@persons, ',', '</Name><Name>') + '</Name>' AS XML) AS [Names]) AS A
CROSS APPLY Names.nodes('/Name') as T(C)
SELECT BusinessEntityID, Title, FirstName, MiddleName, LastName, ModifiedDate
FROM [Person].[Person] PER
WHERE EXISTS (SELECT Name FROM #tblPersons tmp WHERE tmp.Name = PER.FirstName)
ORDER BY FirstName, LastName
DROP TABLE #tblPersons
END
GO
-- No execute this SP by passing a list of values comma separated as a single string:
EXEC uspGetPersonDetailsCSV 'Charles,Jade,Jim,Luke,Ken'
GO
-- Check the output, objective achieved<img width="16" height="16" class="wp-smiley emoji" draggable="false" alt=":)" src="https://s1.wp.com/wp-content/mu-plugins/wpcom-smileys/simple-smile.svg" style="height: 1em; max-height: 1em;">
-- Final Cleanup
DROP PROCEDURE uspGetPersonDetailsCSV
GO