从 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 关键字,那么我们是否必须使用所有列名? @RanitDasVALUES
用于将特定值插入到表中。但是,此查询使用 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 中的选择查询错误插入的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server:如果在选择中的函数的表中找不到,则插入记录
SQL Server 2005中的分区表:如何添加查询修改分区表中的数据