Czy istnieje „prosty” sposób, aby to zrobić, czy też muszę przekazać zmienną tabeli o składni „OUTPUT ... INTO”?
DECLARE @someInt int
INSERT INTO MyTable2(AIntColumn)
OUTPUT @SomeInt = Inserted.AIntColumn
VALUES(12)
sql-server
tsql
Benoittr
źródło
źródło
output
?DECLARE @InsertedIDResults TABLE (ID int); INSERT INTO MyTable (Name, Age) OUTPUT INSERTED.ID INTO @InsertedIDResults VALUES('My Name', 30); DECLARE @InsertedID int = (SELECT TOP 1 ID FROM @InsertedIDResults);
Ponad rok później ... jeśli potrzebujesz automatycznie wygenerowanego identyfikatora tabeli, możesz po prostu
SELECT @ReportOptionId = SCOPE_IDENTITY()
W przeciwnym razie wydaje się, że utknąłeś z używaniem stołu.
źródło
Później, ale nadal warto wspomnieć, że można również używać zmiennych do wyprowadzania wartości w klauzuli SET polecenia UPDATE lub w polach SELECT;
DECLARE @val1 int; DECLARE @val2 int; UPDATE [dbo].[PortalCounters_TEST] SET @val1 = NextNum, @val2 = NextNum = NextNum + 1 WHERE [Condition] = 'unique value' SELECT @val1, @val2
W powyższym przykładzie @ val1 ma wartość przed, a @ val2 ma wartość końcową, chociaż podejrzewam, że jakiekolwiek zmiany z wyzwalacza nie byłyby w val2, więc w takim przypadku musiałbyś przejść z tabelą wyjściową. W każdym przypadku poza najprostszym, myślę, że tabela wyjściowa będzie również bardziej czytelna w twoim kodzie.
Jest to bardzo pomocne, gdy chcesz zamienić kolumnę na listę oddzieloną przecinkami;
DECLARE @list varchar(max) = ''; DECLARE @comma varchar(2) = ''; SELECT @list = @list + @comma + County, @comma = ', ' FROM County print @list
źródło
SET @val2 = NextNum = NextNum + 1
.OUTPUT
wartości zmiennej wINSERT
klauzuli przy użyciuINSERT-OUTPUT-VALUES
podejścia zadanego przez pytającego.