Jeśli mam instrukcję wstawiania, taką jak:
INSERT INTO MyTable
(
Name,
Address,
PhoneNo
)
VALUES
(
'Yatrix',
'1234 Address Stuff',
'1112223333'
)
Jak ustawić @var INT
wartość tożsamości nowego wiersza (wywoływaną Id
) za pomocą klauzuli OUTPUT? Widziałem na przykład przykłady wstawiania INSERTED.Name do zmiennych tabelowych, ale nie mogę umieścić ich w zmiennej innej niż tabelowa.
Próbowałem OUPUT INSERTED.Id AS @var
, SET @var = INSERTED.Id
ale nie pracowali.
sql
sql-server-2005
insert
Yatrix
źródło
źródło
OUTPUT
klauzuli.OUTPUT
Klauzula pisze do stołu. Może to być zmienna tabeli, tabela tymczasowa, ...Odpowiedzi:
Możesz wstawić nowo wstawiony identyfikator do konsoli SSMS w następujący sposób:
Możesz użyć tego również np. Z C #, gdy musisz odzyskać identyfikator do aplikacji wywołującej - po prostu wykonaj zapytanie SQL za pomocą
.ExecuteScalar()
(zamiast.ExecuteNonQuery()
), aby odczytać wynikowyID
powrót.Lub jeśli chcesz przechwycić nowo wstawiony
ID
wewnątrz T-SQL (np. Do późniejszego dalszego przetwarzania), musisz utworzyć zmienną tabelową:W ten sposób możesz umieścić wiele wartości
@OutputTbl
i wykonać na nich dalsze przetwarzanie. Możesz również użyć „zwykłej” tabeli tymczasowej (#temp
) lub nawet „prawdziwej” tabeli trwałej jako „docelowego wyniku” tutaj.źródło
real persistent table
- jest to wyjątkowo fantastyczne, ponieważ oznacza to, że możesz jednocześnieINSERT
informacje wTWO
tabelach.SCOPE_IDENTITY()
działa na to lepiej.