Dwi*_*t T 54 sql sql-server sql-server-2005
我正在从另一个表B中将多个记录插入到表A中.是否有办法获取表A记录的标识值并更新表b记录而不执行游标?
Create Table A
(id int identity,
Fname nvarchar(50),
Lname nvarchar(50))
Create Table B
(Fname nvarchar(50),
Lname nvarchar(50),
NewId int)
Insert into A(fname, lname)
SELECT fname, lname
FROM B
Run Code Online (Sandbox Code Playgroud)
我正在使用MS SQL Server 2005.
And*_*ing 147
使用2005年的ouput条款:
DECLARE @output TABLE (id int)
Insert into A (fname, lname)
OUTPUT inserted.ID INTO @output
SELECT fname, lname FROM B
select * from @output
Run Code Online (Sandbox Code Playgroud)
现在,您的表变量具有您插入的所有行的标识值.
仔细阅读您的问题,您只想根据表A中的新标识值更新表B.
插入完成后,只需运行更新...
UPDATE B
SET NewID = A.ID
FROM B INNER JOIN A
ON (B.FName = A.Fname AND B.LName = A.LName)
Run Code Online (Sandbox Code Playgroud)
这假定FName/LName组合可用于键匹配表之间的记录.如果不是这种情况,您可能需要添加额外的字段以确保记录正确匹配.
如果您没有允许您匹配记录的备用密钥,则它根本没有意义,因为表B中的记录无法彼此区分.
Mef*_*eff -7
MBelly 是对的 - 但是触发器总是会尝试更新表 B,即使这不是必需的(因为您也从表 C 插入?)。
达伦在这里也是正确的,你无法将多个身份作为结果集返回。您的选择是使用游标并获取插入的每一行的标识,或者使用 Darren 的方法来存储前后的标识。只要您知道身份的增量,只要您确保表针对所有三个事件都被锁定,这就应该起作用。
如果是我,而且时间不紧的话,我会使用光标。
| 归档时间: |
|
| 查看次数: |
57476 次 |
| 最近记录: |