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
语句中。