调用OPENROWSET时INSERT INTO和SELECT INTO之间的区别

时间:2016-12-21 16:57:42

标签: sql sql-server sql-server-2012

select 1 as X,d.* into [TravelData] from OPENROWSET('SQLNCLI','Server=<redacted>',
     'exec [OtherDB].[GetTravelData]  1, ''28-Nov-2016 16:00'', ''28-Nov-2016 19:00''') as d

我将此作为将远程数据库粘贴到本地表中的一种方法。这种语法似乎有效但我得到错误:

  

数据库中已有一个名为“TravelData”的对象。

有道理,SELECT INTO是假设来创建表格。但我想我只是将SELECT更改为INSERT然后我会收到语法错误。正确的语法应该是将这些数据放入结构与查询输出匹配的现有数据库表中吗?

2 个答案:

答案 0 :(得分:2)

以下是INSERT INTO SELECT语法

INSERT INTO [TravelData]
            (X,
             col1,
             col2,
             ...)
SELECT 1 AS X,
       d.col1,
       d.col2,
       .....
FROM   OPENROWSET('SQLNCLI',
                  'Server=<redacted>',
                  'exec [OtherDB].[GetTravelData]  1, ''28-Nov-2016 16:00'', ''28-Nov-2016 19:00''') AS d 

注意:而不是*列表中的select,而是添加column列表。同样在Insert中提及列列表

答案 1 :(得分:2)

它与使用OPENROWSET无关。

INSERT INTO ...要求该表已存在。

SELECT ... INTO要求表存在。该表将由语句使用SELECT中定义的列创建。