【发布时间】:2015-02-17 16:16:23
【问题描述】:
我有一个存储过程,它从一个表中获取数据并在另一个表中创建一条记录,结构如下:
TableA = Source Data
TableB = Destination 1
首先,我们从源表中查询我们需要的所有数据,并将其插入TableB。此表有一个名为recordID 的identity。
这是通过Select 语句中的INSERT 完成的,该语句可能包含可变数量的记录。
完成后,我需要使用recordID 更新TableA 中名为TableBRef 的列,该recordID 是从TableB 中的插入创建的。
我尝试使用Scope_Identity(),但由于它插入多条记录,它只获取最后一条记录的ID。
我也尝试创建一个 SQLFiddle,但似乎该站点存在问题,因为我在示例小提琴上也收到错误 Unknown Error Occurred: XML document structures must start and end within the same entity.:。
有什么建议可以完成我所需要的吗?
更新:
这是一些示例代码,因为 SQLFiddle 已关闭:
-- This is our source data
DECLARE @source TABLE (recordID INT IDENTITY (1,1), name VARCHAR(100), phone VARCHAR(20));
INSERT INTO @source(name , phone)
VALUES (
'Bob Desk', '123-456-7899',
'Don Mouse', '123-456-5555',
'Mike Keyboard', '123-456-7899',
'Billy Power', '122-222-1134'
)
-- This is the first step in the process - Inserting the records into our table
DECLARE @data1 TABLE (recordID INT IDENTITY (1,1), name VARCHAR(100) NOT NULL, phone VARCHAR(20) NOT NULL, sourceID INT NULL)
SELECT name, phone
FROM @source;
-- Based on some condition, we take records from @data1 and insert them into @data2
DECLARE @data2 TABLE (recordID INT IDENTITY (1,1), name VARCHAR(100) NOT NULL, phone VARCHAR(20) NOT null)
INSERT INTO @data2( name, phone)
SELECT name, phone
FROM @data1
WHERE phone <> '123-456-5555'
-- I now need to update @data1 with the recordID that was created from inserting the data into @data2
UPDATE @data1 SET SOURCEID = 'blah'
【问题讨论】:
-
使用输出子句获取插入记录的新ID。
-
拥有所有 ID 的列表是一回事,但知道它们与哪条记录相关联是我卡住的地方。如果我在
@data2上进行输出,我将得到一个插入的 id 列表。然后我需要知道哪条记录来自@data1记录以便能够正确更新它? -
使用data1中的recordid向data2添加一列,您可以使用它来加入数据
标签: sql sql-server tsql stored-procedures sql-server-2012