Podczas gdy rozumienie określania adresów odnosi się do bezpośredniej potrzeby, można pomyśleć, że warto dodać kilka dodatkowych opcji do miksu, aby rozwinąć sugestie z komentarzy.
- Przełęcz XML do procedury przechowywanej
- przedostać się parametr tabeli wartościach do procedury przechowywanej
1. Przełęcz XML do procedury przechowywanej
XML wprowadza się do parametr, możesz użyć XML bezpośrednio w zapytaniach SQL i dołączyć/zastosować do innych tabel:
CREATE PROC sp_PassXml
@Xml XML
AS
BEGIN
SET NOCOUNT ON
SELECT T.Node.value('.', 'int') AS [Key]
FROM @Xml.nodes('/keys/key') T (Node)
END
GO
Następnie wywołanie procedury składowanej do testowania:
DECLARE @Text XML = '<keys><key>1</key><key>2</key></keys>'
EXEC sp_PassXml @Text
Przykładowe wyjście prostego zapytania.
Key
-----------
1
2
2. przekazać parametr wycenione tabela w procedurze przechowywanej
Po pierwsze, trzeba określić typ zdefiniowany przez użytkownika w zmiennej dla tabeli mają być używane przez procedury przechowywanej.
CREATE TYPE KeyTable AS TABLE ([Key] INT)
Następnie można użyć tego typu jako parametr do przechowywanej obrady (the READONLY
jest wymagane, ponieważ tylko IN
jest obsługiwany, a tabela nie może zostać zmieniona)
CREATE PROC sp_PassTable
@Keys KeyTable READONLY
AS
BEGIN
SET NOCOUNT ON
SELECT * FROM @Keys
END
GO
Przechowywane proc mogą następnie wywoływane za pomocą zmiennej tabeli bezpośrednio z SQL.
DECLARE @Keys KeyTable
INSERT @Keys VALUES (1), (2)
EXEC sp_PassTable @Keys
Uwaga: Jeśli korzystasz z .NET, możesz przekazać parametr SQL z typu DataTable odpowiadającego typowi zdefiniowanemu przez użytkownika.
Przykładowe wyjście z kwerendy:
Key
-----------
1
2
Zamiast przekazując listę oddzielonych przecinkami w pierwszej kolejności, czy pomyślałeś o używaniu [parametry wycenione tabela] (http://technet.microsoft.com /en-us/library/bb510489.aspx)? Czy też przeczytałeś [ten artykuł] (http://www.sommarskog.se/share_data.html)? –
Lub XML, ponieważ SQL Server oferuje wsparcie dla typu danych XML ... –