[英]SQL Server: Insert batch with output clause
我正在尝试以下
A
此电视有不在A
额外列 A
获取插入的ID,并在TVP中获取相应的额外列,然后将其添加到另一个表B
这是我尝试过的
类型:
CREATE TYPE tvp AS TABLE
(
id int,
otherid int,
name nvarchar(50),
age int
);
表格:
CREATE TABLE A (
[id_A] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](50),
[age] [int]
);
CREATE TABLE B (
[id_B] [int] IDENTITY(1,1) NOT NULL,
[id_A] [int],
[otherid] [int]
);
插入:
DECLARE @a1 AS tvp;
DECLARE @a2 AS tvp
-- create a tvp (dummy data here - will be passed to as a param to an SP)
INSERT INTO @a1 (name, age, otherid) VALUES ('yy', 10, 99999), ('bb', 20, 88888);
INSERT INTO A (name, age)
OUTPUT
inserted.id_A,
inserted.name,
inserted.age,
a.otherid -- <== isn't accepted here
INTO @a2 (id, name, age, otherid)
SELECT name, age FROM @a1 a;
INSERT INTO B (id_A, otherid) SELECT id, otherid FROM @a2
但是,此操作失败, The multi-part identifier "a.otherid" could not be bound.
,我猜这是预料之中的,因为INSERT
语句( https://msdn.microsoft.com/zh-cn/library/ms177564.aspx )不接受其他表中的列。
from_table_name是列前缀,用于指定DELETE,UPDATE或MERGE语句的FROM子句中包含的表,该表用于指定要更新或删除的行。
那么还有其他方法可以实现这一目标吗?
您不能使用INTO运算符从源表中选择值。 在这种情况下,请在MERGE命令中使用OUTPUT子句。
DECLARE @a1 AS tvp;
DECLARE @a2 AS tvp
INSERT INTO @a1 (name, age, otherid) VALUES ('yy', 10, 99999), ('bb', 20, 88888);
MERGE A a
USING @a1 a1
ON a1.id =a.[id_A]
WHEN NOT MATCHED THEN
INSERT (name, age)
VALUES (a1.name, a1.age)
OUTPUT inserted.id_A,
a1.otherId,
inserted.name,
inserted.age
INTO @a2;
INSERT INTO B (id_A, otherid) SELECT id, otherid FROM @a2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.