Sql 如何选择比插入列更多的列
我有以下疑问:Sql 如何选择比插入列更多的列,sql,sql-server,Sql,Sql Server,我有以下疑问: INSERT INTO TableA (Col1, Col2, Col3) OUTPUT @SomeData, INSERTED.ID, ID INTO TableB(SomeColumn, TableAID, ID) SELECT Col1, Col2, Col3, ID FROM TableC; 当我运行它时,会出现以下错误: INSERT语句的select列表包含的项目多于INSERT列表。SELECT值的数量必须与INSERT列的数量匹配 这个错误是有道理的,但我不知道
INSERT INTO TableA (Col1, Col2, Col3)
OUTPUT @SomeData, INSERTED.ID, ID INTO TableB(SomeColumn, TableAID, ID)
SELECT Col1, Col2, Col3, ID
FROM TableC;
当我运行它时,会出现以下错误:
INSERT语句的select列表包含的项目多于INSERT列表。SELECT值的数量必须与INSERT列的数量匹配
这个错误是有道理的,但我不知道如何修复它。我想从表格C
中选择4列,但我只想在表格A
中插入其中三列(Col1、Col2、Col3)。我选择列ID
,因为我想将它插入TableB
的ID
列中。有办法吗
CREATE TABLE TableA
(
ID bigint identity
constraint PK_TableA_ID
primary key
Col1 int,
Col2 int,
Col3 int
)
CREATE TABLE TableB
(
ID [int] NOT NULL,
SomeColumn [int] NOT NULL,
TableAID [bigint] NOT NULL
);
CREATE TABLE TableC
(
ID [int] IDENTITY (1,1) NOT NULL,
Col1 [int],
Col2 [int],
Col3 [int],
);
您可以尝试合并并编写如下内容:
MERGE TableA AS target
USING TableC AS source
ON 1 = 0
WHEN NOT MATCHED BY target
THEN INSERT (Col1, Col2, Col3) VALUES (source.Col1, source.Col2, source.Col3)
OUTPUT @SomeData, INSERTED.ID, source.ID INTO TableB (SomeColumn,TableAID, ID);
TableA和TableB的结构是什么?“我想从TableC中选择4列,但我只想插入其中的3列”您正在
insert
ing 4列,而不是select
ing 4列。如果要选择这些列,则应将它们写入OUTPUT
子句中,而不是SELECT
语句中。