【问题标题】:Issues with getting uniqueidentifier auto generate in SQL on insert插入时在 SQL 中自动生成唯一标识符的问题
【发布时间】:2025-12-29 06:50:11
【问题描述】:

我正在尝试将数据从一个表插入到另一个表中。 Table1 没有唯一标识符,但 Table2 有。我尝试使用NEWID() 插入,但出现语法错误。有人可以告诉我我做错了什么吗?

INSERT INTO Table2 (NEWID(), [Item Description], [Item Cost])
SELECT Description, Cost FROM  Table1
WHERE Id = '1'

【问题讨论】:

    标签: sql sql-server uniqueidentifier auto-generate insert-into


    【解决方案1】:

    如果 Table2 尚未创建,您可以使用此查询:

    SELECT
         NEWID() AS [ID]
        ,Description AS [Item Description]
        ,Cost AS [Item Cost]
    INTO Table2
    FROM Table1
    WHERE Id = '1'
    

    但是,如果表 2 的架构已经创建,并且它有一个标识符列,那么您可以使用:

    INSERT INTO Table2 ([ID], [Item Description], [Item Cost])
    SELECT
       NEWID()
       , Description
       , Cost
    FROM Table1
    WHERE Id = '1'
    

    但是,如果您还没有为 Table2 创建架构,那么我建议您使用以下代码为表创建架构并填充其中的数据,使用来自 Table1 的数据。

    CREATE TABLE Table2 (
        [ID] INT Identity
        ,[Item Description] AS NVARCHAR(MAX)
        ,[Item Cost] AS NUMERIC(18, 2))
    
    INSERT INTO Table2([Item Description] , [Item Cost])
    SELECT
        Description
        , Cost
    FROM Table1
    WHERE Id = '1'
    

    将 ID 列设置为 Identity 将为您不必担心填充的每一行自动生成唯一的标识符编号。该数字是递增的,默认情况下每行递增 1,从 1 开始。

    您还可以通过将 [ID] 列定义为 [ID] INTEGER IDENTITY(1000, 2) 来定义起始编号和增量值,这将使起始值 1000 并且增量将为 2(但这只是仅供参考)。

    【讨论】:

    • 有道理,现在试试
    • @nate 我只是在我的答案中添加了这个细节。还有一条评论要说。
    • @nate 不客气。如果这对您有用,请不要忘记在 * 上将每个解决您问题的答案标记为正确答案。