我使用以下查询将数据从一个表插入另一个表:
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)
两个表中的列都相同,但我收到以下错误:
你能告诉我这里的错误吗?Msg 156,Level 15,State 1,Line 7
关键字'SELECT'附近的语法不正确。Msg 102,Level 15,State 1,Line 7
')'附近的语法不正确。
答案 0 :(得分:4)
您不需要VALUES
关键字:
INSERT INTO CIGARETTE_HEADER
SELECT * FROM CIGARETTE_HEADER_BK1
WHERE MATERIAL_NUMBER = @MATNO AND
GLOBAL_REVISION = @GLOBALREV AND
LOCAL_REVISION = @LOCALREP
最好明确引用参与INSERT
语句的两个表的每个字段名称。
答案 1 :(得分:2)
您不需要使用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);
答案 2 :(得分:1)
在这个问题上稍微扩展一下。
VALUES()实际上是一个表构造函数。 将行插入表时,可以使用SELECT获取行或VALUE构造函数。
尽管在示例中经常使用INSERT INTO ... VALUES来插入行,但您可以使用它插入多行,用逗号分隔它们。
EG。 INSERT INTO表(col1,col2) 价值观(1,2) ,(3,4) ,(5,6)
会在表格中插入一组3行。
VALUES也可用于制作派生表,允许一些高级数据操作。