Jak użyć klauzuli OUTPUT instrukcji INSERT, aby uzyskać wartość tożsamości?
Jeśli posiadam polecenie insert takie jak:
INSERT INTO MyTable
(
Name,
Address,
PhoneNo
)
VALUES
(
'Yatrix',
'1234 Address Stuff',
'1112223333'
)
Jak ustawić @var INT
na wartość tożsamości nowego wiersza (wywołaną Id
) używając klauzuli OUTPUT? Widziałem próbki wkładania INSERTED.Name do zmiennych tabeli, na przykład, ale nie mogę dostać go do zmiennej nie-tabeli.
Próbowałem OUPUT INSERTED.Id AS @var
, SET @var = INSERTED.Id
, ale żadne z nich nie zadziałało.
1 answers
Nowo wstawiony identyfikator może być wysyłany do konsoli SSMS w następujący sposób:
INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')
Możesz użyć tego również z np. C#, gdy potrzebujesz odzyskać ID do aplikacji wywołującej-po prostu wykonaj zapytanie SQL z .ExecuteScalar()
(zamiast .ExecuteNonQuery()
), aby odczytać wynikowe ID
z powrotem.
Lub jeśli chcesz przechwycić nowo wstawione ID
wewnątrz T-SQL( np. do późniejszego dalszego przetwarzania), musisz utworzyć zmienną tabelkową:
DECLARE @OutputTbl TABLE (ID INT)
INSERT INTO MyTable(Name, Address, PhoneNo)
OUTPUT INSERTED.ID INTO @OutputTbl(ID)
VALUES ('Yatrix', '1234 Address Stuff', '1112223333')
W ten sposób można umieścić wiele wartości do @OutputTbl
i dalej je przetwarzać. Możesz również użyć" zwykłej "tabeli tymczasowej (#temp
) lub nawet" rzeczywistej "tabeli trwałej jako" docelowego wyjścia".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-12 13:48:01