繁体   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