Ben*_*ttr 122 t-sql sql-server
有没有"简单"的方法来做到这一点,或者我需要传递一个带有"OUTPUT ... INTO"语法的表变量?
DECLARE @someInt int
INSERT INTO MyTable2(AIntColumn)
OUTPUT @SomeInt = Inserted.AIntColumn
VALUES(12)
Run Code Online (Sandbox Code Playgroud)
Mik*_*son 148
你需要一个表变量,它可以很简单.
declare @ID table (ID int)
insert into MyTable2(ID)
output inserted.ID into @ID
values (1)
Run Code Online (Sandbox Code Playgroud)
Ale*_* B. 28
一年之后......如果您需要的是获取表格的自动生成ID,您可以
SELECT @ReportOptionId = SCOPE_IDENTITY()
Run Code Online (Sandbox Code Playgroud)
否则,您似乎无法使用表格.
小智 10
您可以用来@@IDENTITY获取最后插入的 id。
DECLARE @someInt int
INSERT INTO MyTable2(AIntColumn)
VALUES(12)
SET @someInt = @@IDENTITY;
Run Code Online (Sandbox Code Playgroud)
假设您的表有一个主键,您希望将其设置为所述变量。
CREATE TABLE MyTable2(
[ID] [INT] IDENTITY(1,1),
[aIntColumn] [INT]
)
CREATE TABLE MyTable3(
[ID] [INT] IDENTITY(1,1),
[newInt] [INT],
[FK_int] [INT]
)
Run Code Online (Sandbox Code Playgroud)
然后您可以在脚本的下一部分中使用它,例如
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';
Run Code Online (Sandbox Code Playgroud)
稍后但仍然值得一提的是,您还可以使用变量在 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
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,@val1 具有前值,@val2 具有后值,尽管我怀疑触发器的任何更改都不会在 val2 中,因此在这种情况下您必须使用输出表。除了最简单的情况外,我认为输出表在您的代码中也将更具可读性。
一个非常有用的地方是,如果您想将一列转换为逗号分隔的列表;
DECLARE @list varchar(max) = '';
DECLARE @comma varchar(2) = '';
SELECT @list = @list + @comma + County, @comma = ', ' FROM County
print @list
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89352 次 |
| 最近记录: |