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)
Odpowiedzi:
Potrzebujesz zmiennej tabeli i może to być takie proste.
declare @ID table (ID int)
insert into MyTable2(ID)
output inserted.ID into @ID
values (1)
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.
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
SET @val2 = NextNum = NextNum + 1
.
OUTPUT
wartości zmiennej w INSERT
klauzuli przy użyciu INSERT-OUTPUT-VALUES
podejścia zadanego przez pytającego.