Câu trả lời:
Bạn cần một biến bảng và nó có thể đơn giản.
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);
Hơn một năm sau ... nếu những gì bạn cần là lấy id được tạo tự động của bảng, bạn có thể chỉ cần
SELECT @ReportOptionId = SCOPE_IDENTITY()
Nếu không, có vẻ như bạn đang bị mắc kẹt với việc sử dụng bảng.
Cách sau nhưng vẫn đáng nói là bạn cũng có thể sử dụng các biến để xuất giá trị trong mệnh đề SET của CẬP NHẬT hoặc trong các trường của CHỌN;
DECLARE @val1 int;
DECLARE @val2 int;
UPDATE [dbo].[PortalCounters_TEST]
SET @val1 = NextNum, @val2 = NextNum = NextNum + 1
WHERE [Condition] = 'unique value'
SELECT @val1, @val2
Trong ví dụ trên @ val1 có giá trị trước và @ val2 có giá trị sau mặc dù tôi nghi ngờ bất kỳ thay đổi nào từ trình kích hoạt sẽ không nằm trong val2 nên bạn phải đi với bảng đầu ra trong trường hợp đó. Đối với bất cứ điều gì trừ trường hợp đơn giản nhất, tôi nghĩ rằng bảng đầu ra cũng sẽ dễ đọc hơn trong mã của bạn.
Một nơi rất hữu ích là nếu bạn muốn biến một cột thành một danh sách được phân tách bằng dấu phẩy;
DECLARE @list varchar(max) = '';
DECLARE @comma varchar(2) = '';
SELECT @list = @list + @comma + County, @comma = ', ' FROM County
print @list
SET @val2 = NextNum = NextNum + 1
.