根据插入的 ID 和 SQL 中的另一个非源列更新记录
Update records based on inserted IDs and another non source column in SQL
可能已经有了答案,但我找不到...所以我有 2 个 table 和第三个中的数据。让我们为它们命名(源、目标和更新目标)。
我需要将记录从 Source 插入到 Target,然后从 Target 获取自动递增的 ID,并根据来自 Source table 的过滤器使用这些 ID 更新 UpdateTarget table。我尝试使用 OUTPUT,但它给了我一个错误:
The multi-part identifier "s.EmployeeID" could not be bound.
这是我当前的 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
我在目标 table 中没有 EmployeeID 列。
有没有办法不用对每条记录进行两次查询就可以实现?或者,如果有的话,你能告诉我现有的答案吗?
谢谢!
1) INSERT INTO table 变量生成的 id 和 EmployeeId 用于更新
2) MERGE 而不是 INSERT(它允许从 SRC 获取列 EmployeeId)
3) 输出结果,插入操作,从 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);;
可能已经有了答案,但我找不到...所以我有 2 个 table 和第三个中的数据。让我们为它们命名(源、目标和更新目标)。
我需要将记录从 Source 插入到 Target,然后从 Target 获取自动递增的 ID,并根据来自 Source table 的过滤器使用这些 ID 更新 UpdateTarget table。我尝试使用 OUTPUT,但它给了我一个错误:
The multi-part identifier "s.EmployeeID" could not be bound.
这是我当前的 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
我在目标 table 中没有 EmployeeID 列。
有没有办法不用对每条记录进行两次查询就可以实现?或者,如果有的话,你能告诉我现有的答案吗?
谢谢!
1) INSERT INTO table 变量生成的 id 和 EmployeeId 用于更新
2) MERGE 而不是 INSERT(它允许从 SRC 获取列 EmployeeId)
3) 输出结果,插入操作,从 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);;