【问题标题】:SQL: use SELECT to INSERT data into table with extra columnSQL:使用 SELECT 将数据插入带有额外列的表中
【发布时间】:2012-11-25 19:46:48
【问题描述】:

我有一张表Table1,有 59 列。 Table2Table1 的副本,在末尾有一个额外的列 COLUMN 60。因此table2 有 60 列。

我正在尝试将值从table1 复制到table2 并将table2 中额外列的值设置为“值”

类似的东西

INSERT INTO Table2
   SELECT * FROM Table1, 'value' AS 'COLUMN 60'

我该怎么做?使用上面的代码给我一个错误:

只有在使用列列表并且 IDENTITY_INSERT 时才能为表“TableLocation”中的标识列指定显式值 已开启。

我不想指定列名,因为它们太多了。

【问题讨论】:

  • 如果您不能使用所有列 (SELECT *),因为其中一列是 IDENTITY 列 - 那么您必须指定全部要插入的列以及要从 table1 中选择的列 ....(最好始终明确指定要插入和选择的列!)

标签: sql sql-server select insert


【解决方案1】:

您知道您可以直接从 SSMS 中拖动列名,对吗?导航到表格,然后将列文件夹拖到查询窗口中,它将为您列出所有列

现在,如果您想保留标识值,请使用

SET IDENTITY_INSERT dbo.Table2 ON

--INSERT HERE
-- make sure to list all the columns, it is required

SET IDENTITY_INSERT dbo.Table2 OFF

【讨论】:

    【解决方案2】:

    真的需要在一个语句中完成吗?

    INSERT INTO Table2
    SELECT * FROM Table1
    
    ALTER TABLE Table2
    ADD Column60 varchar
    

    【讨论】:

    • 我不想重新创建整个 table2,因为我会丢失已经存在的额外列中的值
    • 啊,我没有意识到您正在寻找追加到表 2 中的现有数据。对不起。
    【解决方案3】:

    试试这个:

    SET IDENTITY_INSERT dbo.Table2 ON
    
    INSERT INTO Table2
    SELECT *, 'value' AS 'COLUMN 60' FROM Table1
    
    SET IDENTITY_INSERT dbo.Table2 OFF
    

    【讨论】:

    • 不应该是SELECT *, 'value' FROM dbo.Table1 .... 吗?您想选择一个额外的 column - 而不是从其他表中选择 ....
    • @marc_s - 我从 OP 的问题中剪切和粘贴,但是,经过审查我同意 - 已编辑。
    猜你喜欢
    • 2023-01-26
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    相关资源
    最近更新 更多