【问题标题】:Difference between INSERT INTO and SELECT INTO when calling OPENROWSET调用 OPENROWSET 时 INSERT INTO 和 SELECT INTO 的区别
【发布时间】: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下面的答案似乎完美地处理了你的具体情况。

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


【解决方案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 中提及列列表

    【讨论】:

      猜你喜欢
      • 2012-01-23
      • 2023-02-09
      • 2013-10-01
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多