从 SQL Server 中的选择查询错误插入

Posted

技术标签:

【中文标题】从 SQL Server 中的选择查询错误插入【英文标题】:Insert into from select query error in 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 行 ')' 附近的语法不正确。

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于从 SQL Server 中的选择查询错误插入的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft SQL Server 从选择查询插入

SQL Server:如果在选择中的函数的表中找不到,则插入记录

SQL Server 2005中的分区表:如何添加查询修改分区表中的数据

插入到从选择性能 SQL Server

使用查询从 Microsoft SQL Server 导出数据到目标数据

如何让 SQL Server 2008r2 向我显示错误?