Was ist die richtige Vorgehensweise zum Ausführen der folgenden in SQL Server?Übergeben Sie mehrere Werte an die gespeicherte Prozedur
Execute myStore @dept='dept1',@dept='dept2'
oder
Execute myStore @dept in ('dept1','dept2')
Was ist die richtige Vorgehensweise zum Ausführen der folgenden in SQL Server?Übergeben Sie mehrere Werte an die gespeicherte Prozedur
Execute myStore @dept='dept1',@dept='dept2'
oder
Execute myStore @dept in ('dept1','dept2')
können Sie diese article verweisen. Es gibt 5 Möglichkeiten, wie Sie es erreichen können:
Methode # 1 - Passing eine CSV: Liste von Strings als Parameter an einen (N) VARCHAR-Datentyp Parameter, dann Aufteilungs-/es in der SP-Parsing oder UDF, check here.
Methode # 2 - Übergeben einer XML: Zeichenfolge als XML-Datentypparameter. Wir müssen die XML im SP, check here analysieren.
Methode # 3 - Verwendung einer temporären Tabelle: in einem SP, der außerhalb seiner Ausführung erstellt wird. Hier muss kein Parameter mit dem SP, check here übergeben werden.
Methode # 4 - Mit TVPs: Mit SQL Server 2008 und höher Sie TVPs oder Tabelle Wertparameter und erklären sie unter Verwendung benutzerdefinierte Tabellentypen erstellen können. Diese TVPs können dann verwendet werden, um mehrere Datenzeilen an SPs oder UDFs zu senden, ohne eine temporäre Tabelle oder mehrere Parameter zu erstellen, check here.
Methode # 5 - Übergabe einer JSON-Zeichenfolge: als NVARCHAR-Datentypparameter. Wir müssen den JSON im SP check here analysieren.
Zum Beispiel das Verfahren 1 Beispiel aus der linked source:
-- 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