可能已经有答案,但我找不到它......所以我在第三个表中有2个表和数据。让它们命名(Source,Target和UpdateTarget)。
我需要从Source到Target插入记录,然后从Target获取自动增量ID,并根据Source表中的过滤器使用这些ID更新UpdateTarget表。我试过使用OUTPUT,但它给了我一个错误:
无法绑定多部分标识符“s.EmployeeID”。
这是我当前的SQL查询:
CREATE TABLE dbo.target
(
id INT IDENTITY(1,1) PRIMARY KEY,
employee VARCHAR(32)
);
CREATE TABLE dbo.source
(
id INT IDENTITY(1,1) PRIMARY KEY,
employee VARCHAR(32),
EmployeeID int
);
CREATE TABLE dbo.updateTarget
(
id INT IDENTITY(1,1) PRIMARY KEY,
ExternalID int
);
DECLARE @MyTableVar TABLE
(
id INT,
EmployeeID int
);
INSERT dbo.target (employee)
OUTPUT
inserted.id, -- autoincremented ID
s.EmployeeID -- here i got an error
INTO @MyTableVar
SELECT s.employee
FROM dbo.source AS s
UPDATE dbo.updateTarget
SET ExternalID = data.ID
FROM @MyTableVar data
WHERE updateTarget.ID = data.EmployeeID
DROP TABLE source
DROP TABLE target
DROP TABLE updateTarget
目标表中没有EmployeeID列。
有没有办法实现它而不对每条记录进行两次查询?或者你可以指出我现有的答案吗?
谢谢!
答案 0 :(得分:1)
1)INSERT INTO表变量生成的id,以及EmployeeId用于更新
2)MERGE而不是INSERT(它允许从SRC获取列EmployeeId)
3)OUTPUT结果,插入操作,从TGT和EmployeeId获取id
INSERT INTO @MyTableVar(id, EmployeeId)
SELECT id, EmployeeId
FROM (
MERGE dbo.target TGT
USING dbo.source SRC
ON TGT.employee = SRC.employee
WHEN NOT MATCHED THEN
INSERT (employee)
VALUES (src.employee)
OUTPUT inserted.id, SRC.EmployeeId)
AS out(id, EmployeeId);;