以下是我在SQL查询分析器中尝试做的事情。
Insert into db_name1.dbo.tb_name1 (select * from db_name2.dbo.tb_name2)
但我不断收到此错误消息
Server: Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'select'.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near ')'.
我想知道出了什么问题。子查询在SQL Server 2000中不起作用吗? 这个的正确语法是什么?我想将数据库的表列中的所有值传递到另一个数据库的另一个表,而不创建其元素的任何副本,但只是覆盖当前值。
答案 0 :(得分:2)
这是您认为应该重叠的查询:
Insert into db_name1.dbo.tb_name1
(select * from db_name2.dbo.tb_name2)
这是编译器看到的查询:
Insert into db_name1.dbo.tb_name1(select * from db_name2.dbo.tb_name2)
也就是说,表名后的开括号表示“列的列表从这里开始”。但是你没有列的列表。 select
不是有效的列名。因此错误。
通过删除括号可以很容易地解决这个问题:
Insert into db_name1.dbo.tb_name1
select * from db_name2.dbo.tb_name2
但是,包含要插入的列名更为正确:
Insert into db_name1.dbo.tb_name1(col1 . . .)
select * from db_name2.dbo.tb_name2;
总是在insert语句中包含列名是个好主意。如果你这样做了,你就不必问这个问题了。