调用 OPENROWSET 时 INSERT INTO 和 SELECT INTO 的区别
Posted
技术标签:
【中文标题】调用 OPENROWSET 时 INSERT INTO 和 SELECT INTO 的区别【英文标题】:Difference between INSERT INTO and SELECT INTO when calling OPENROWSET 【发布时间】:2016-12-21 16:57:41 【问题描述】: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
然后我得到语法错误。将这些数据放入结构与查询输出匹配的现有数据库表中的正确语法应该是什么?
【问题讨论】:
我认为您的意思是“SELECT INTO
应该创建 表”,而不是 DB。您可以在此处阅读SELECT INTO
和INSERT INTO
的比较:INSERT INTO vs SELECT INTO。 Prdp下面的答案似乎完美地处理了你的具体情况。
【参考方案1】:
它与使用 OPENROWSET 无关。
INSERT INTO ...
要求表已经存在。
SELECT ... INTO
要求表不 存在。该表将由语句使用 SELECT 中定义的列创建。
【讨论】:
【参考方案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
中提及列列表
【讨论】:
以上是关于调用 OPENROWSET 时 INSERT INTO 和 SELECT INTO 的区别的主要内容,如果未能解决你的问题,请参考以下文章