Ответы:
Вам нужна табличная переменная, и это может быть так просто.
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);
Более года спустя ... если вам нужно получить автоматически сгенерированный идентификатор таблицы, вы можете просто
SELECT @ReportOptionId = SCOPE_IDENTITY()
В противном случае кажется, что вы застряли в использовании таблицы.
Позже, но все же стоит упомянуть, что вы также можете использовать переменные для вывода значений в предложении SET UPDATE или в полях 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
В приведенном выше примере @ val1 имеет значение до, а @ val2 имеет значение после, хотя я подозреваю, что никаких изменений из триггера не будет в val2, поэтому в этом случае вам придется использовать выходную таблицу. В любом случае, кроме простейшего, я думаю, что и в вашем коде таблица вывода будет более читаемой.
Это очень полезно, если вы хотите превратить столбец в список, разделенный запятыми;
DECLARE @list varchar(max) = '';
DECLARE @comma varchar(2) = '';
SELECT @list = @list + @comma + County, @comma = ', ' FROM County
print @list
SET @val2 = NextNum = NextNum + 1
.
OUTPUT
значение переменной в INSERT
предложении, используя INSERT-OUTPUT-VALUES
подход, который просил спрашивающий.