【问题标题】:Insert into from select query error in SQL Server从 SQL Server 中的选择查询错误插入
【发布时间】:2016-04-24 20:56:46
【问题描述】:

我正在使用以下查询将数据从一个表插入到另一个表:

DECLARE @MATNO NVARCHAR(10), @GLOBALREV INT, @LOCALREP INT

SET @MATNO = '7AGME'
SET @GLOBALREV = 11
SET @LOCALREP = 1

INSERT INTO CIGARETTE_HEADER 
VALUES 
    (SELECT * 
     FROM CIGARETTE_HEADER_BK1 
     WHERE MATERIAL_NUMBER = @MATNO 
       AND GLOBAL_REVISION = @GLOBALREV 
       AND LOCAL_REVISION = @LOCALREP)

两个表中的列相同,但出现以下错误:

消息 156,第 15 级,状态 1,第 7 行
关键字“SELECT”附近的语法不正确。

消息 102,第 15 级,状态 1,第 7 行
')' 附近的语法不正确。

你能告诉我这里的错误吗?

【问题讨论】:

    标签: sql sql-server sql-server-2008


    【解决方案1】:

    你不需要VALUES关键字:

    INSERT INTO CIGARETTE_HEADER  
    SELECT * FROM CIGARETTE_HEADER_BK1 
    WHERE MATERIAL_NUMBER = @MATNO AND 
          GLOBAL_REVISION = @GLOBALREV AND 
          LOCAL_REVISION = @LOCALREP
    

    最好明确引用参与INSERT 语句的两个表的每个字段名称。

    【讨论】:

    • 谢谢!!它起作用了....但是为什么这里不需要 values 关键字...如果我们使用 VALUES 关键字,那么我们是否必须使用所有列名?
    • @RanitDas VALUES 用于将特定值插入到表中。但是,此查询使用 INSERT INTO SELECT,它具有不同的语法(没有 VALUES)。
    【解决方案2】:

    您不需要使用 VALUES () 表示法。仅当您要插入静态值时才使用它,并且只有一个寄存器。 例子: 插入表格 VALUES('value1',12, newid());

    我还建议您写下您打算插入的列的名称,如下所示:

    INSERT INTO Table
    (String1, Number1, id)
    VALUES('value1',12, newid());
    

    在你的情况下,做同样的事情,但只使用选择:

    DECLARE @MATNO NVARCHAR(10), @GLOBALREV INT, @LOCALREP INT;
    
    SET @MATNO = '7AGME';
    SET @GLOBALREV = 11;
    SET @LOCALREP = 1;
    
    INSERT INTO CIGARETTE_HEADER
    (ColumnName1, ColumnName2)
    SELECT ColumnNameInTable1, ColumnNameInTable2
    FROM CIGARETTE_HEADER_BK1 
    WHERE MATERIAL_NUMBER = @MATNO 
    AND GLOBAL_REVISION = @GLOBALREV 
    AND LOCAL_REVISION = @LOCALREP);
    

    【讨论】:

      【解决方案3】:

      稍微扩展一下这个问题。

      VALUES() 实际上是一个表构造函数。 向表中插入行时,您可以使用 SELECT 获取行或 VALUE 构造函数。

      尽管在示例中经常使用 INSERT INTO... VALUES 来插入一行,但您也可以使用它来插入多行,并用逗号分隔它们。

      例如。 插入表(col1,col2) 价值观 (1, 2) , (3, 4) , (5, 6)

      会在您的表中插入一组 3 行。

      VALUES 还可用于制作派生表,允许进行一些高级数据操作。

      https://msdn.microsoft.com/en-us/library/dd776382.aspx

      【讨论】:

        猜你喜欢
        • 2013-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多