我有两个表我的SQL服务器GamerName和GamerValues我想的是,当我insert在一个新行GamerName
GamerName
????????????????
? ID ? Name ?
????????????????
? 1 ? Jeff ?
? 2 ? Geoff ?
? 3 ? Jarrod ?
? 4 ? Joel Sp ?
????????????????
Run Code Online (Sandbox Code Playgroud)
因此,使用insertedtable 上的最后一个ID GamerName,应填写值GamerValues
GamerValues
??????????????????????????????
? ID ? GamerID ? Score ?
??????????????????????????????
? 1 ? 1 ? 5636 ?
? 2 ? 2 ? 148 ?
? 3 ? 3 ? 101 ?
? 4 ? 4 ? 959 ?
??????????????????????????????
Run Code Online (Sandbox Code Playgroud)
是否可以通过单个查询来完成?
您不需要触发器或任何@@IDENTITY,SCOPE_IDENTITY()函数。它们都有限制,并且都不能处理不是由IDENTITY约束产生的值。它们也都不能处理多次插入。
您可以使用的OUTPUT子句INSERT将新插入的值复制到另一个表或表变量中。
输出也可用于更新和删除。您可以使用inserted.和deleted.前缀检索新的/修改的列
对于这些表:
create table #GamerName
(
ID int IDENTITY primary key,
Name nvarchar(20) not null
);
create table #GamerValues(
ID int IDENTITY primary key,
GamerID int not null,
Score int not null
);
Run Code Online (Sandbox Code Playgroud)
您可以插入新记录#GamerName并将生成的 ID 复制到#GamerValues:
INSERT INTO #GamerName (Name)
OUTPUT inserted.ID,0 into #GamerValues(GamerID,Score)
VALUES
('Jeff'),
('Geoff'),
('Jarrod'),
Run Code Online (Sandbox Code Playgroud)
新值出现在inserted虚拟表中。输出也可用
将为 GamerValues 中的每个玩家创建一条新行。让我们修改默认分数:
UPDATE #GamerValues
SET Score=100
Run Code Online (Sandbox Code Playgroud)
该表将如下所示:
ID GamerID Score
1 1 100
2 2 100
3 3 100
Run Code Online (Sandbox Code Playgroud)
添加另一个玩家
insert into #GamerName (Name)
output inserted.ID,0 into #GamerValues(GamerID,Score)
Values
('Joel sp')
Run Code Online (Sandbox Code Playgroud)
将产生得分为 0 的新行
ID GamerID Score
1 1 100
2 2 100
3 3 100
4 4 0
Run Code Online (Sandbox Code Playgroud)