【问题标题】:How to select more columns than insert column如何选择比插入列更多的列
【发布时间】:2020-09-08 07:14:04
【问题描述】:

我有以下疑问:

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 列的数量相匹配。

这个错误是有道理的,但我不知道如何解决它。我想从TableC 中选择 4 列,但我只想将其中的三列(Col1、Col2、Col3)插入TableA。我选择列 ID 是因为我想将其插入到 TableBID 列中。有什么办法吗?

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],

);

【问题讨论】:

  • TableA和TableB的结构是什么?
  • “我想从 TableC 中选择 4 列,但我只想插入其中的 3 列” 你是 INSERTing 4 列而不是 SELECTing他们。如果你想SELECT 这些列,那么你应该把它们写在OUTPUT 子句而不是SELECT 语句中。

标签: sql sql-server


【解决方案1】:

您可以尝试合并并编写如下内容:

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);

【讨论】:

    猜你喜欢
    • 2015-01-16
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2013-02-20
    相关资源
    最近更新 更多