2016-04-28 84 views

回答

3

你可以參照這個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 
相關問題