簡體   English   中英

SQL Server 輸出子句轉換為標量變量

[英]SQL Server Output Clause into a scalar variable

是否有任何“簡單”的方法可以做到這一點,或者我需要使用“OUTPUT ... INTO”語法傳遞一個表變量?

DECLARE @someInt int

INSERT INTO MyTable2(AIntColumn)
OUTPUT @SomeInt = Inserted.AIntColumn
VALUES(12)

你需要一個表變量,它可以很簡單。

declare @ID table (ID int)

insert into MyTable2(ID)
output inserted.ID into @ID
values (1)

一年之后......如果您需要的是獲取表格的自動生成ID,您可以

SELECT @ReportOptionId = SCOPE_IDENTITY()

否則,您似乎無法使用表格。

稍后但仍然值得一提的是,您還可以使用變量在UPDATE的SET子句或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具有before值,而@ val2具有after值,但我懷疑觸發器的任何更改都不在val2中,因此在這種情況下您必須使用輸出表。 除了最簡單的情況之外,我認為輸出表在代碼中也更具可讀性。

一個地方非常有用,如果你想把一個列變成以逗號分隔的列表;

DECLARE @list varchar(max) = '';
DECLARE @comma varchar(2) = '';
SELECT @list = @list + @comma + County, @comma = ', ' FROM County
print @list

回答

您可以使用@@IDENTITY獲取最后插入的 id。

DECLARE @someInt int
INSERT INTO MyTable2(AIntColumn)
VALUES(12)
SET @someInt = @@IDENTITY;

假設您的表有一個主鍵,您希望將其設置為所述變量。

示例架構

CREATE TABLE MyTable2(
    [ID] [INT] IDENTITY(1,1),
    [aIntColumn] [INT]
)
CREATE TABLE MyTable3(
    [ID] [INT] IDENTITY(1,1),
    [newInt] [INT],
    [FK_int] [INT]
)

然后您可以在腳本的下一部分中使用它,例如

DECLARE @someInt INT;
INSERT INTO MyTable2(AIntColumn)
VALUES(12)
SET @someInt = @@IDENTITY;

--do something else
DECLARE @someInt2 INT;
INSERT INTO MyTable3(newInt, FK_int)
VALUES(101, @someInt)
SET @someInt2 = @@IDENTITY;

SELECT @someInt AS 'First Inserted ID ',  @someInt2 AS 'Second inserted ID';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM