我的T-SQL查询中的SELECT INTO语句有什么问题?

时间:2019-02-26 07:28:29

标签: sql-server tsql

我正在使用SQL Server 2014,并且有以下T-SQL查询,该查询应该将SelectView语句的输出插入到{{1 }}尚不存在的表:

SQL

USE MyDatabase SELECT * INTO dbo.[QueryType2_TBL] FROM OPENDATASOURCE ( 'SQLOLEDB', 'Data Source=MyDatabase;User ID=XXX;Password=XXXXX' ,SELECT * FROM MyDatabase.dbo.[QueryType2] ); 代码中似乎存在语法错误,但我不知道如何纠正它们。注意,QueryType2_TBL是数据库中不存在的表。我是在正确执行操作还是在执行另一种方法?

2 个答案:

答案 0 :(得分:4)

您使用OPENDATASOURCE就像使用OPENROWSET一样,这两个行为不同。您的语法与OPENROWSET的语法匹配,该语法要求将查询作为第3个参数(OPENDATASET不需要)。

尝试以下操作:

SELECT * INTO dbo.[QueryType2_TBL]
FROM 
     OPENROWSET
       (
          'SQLOLEDB', 
          'Data Source=MyDatabase;User ID=XXX;Password=XXXXX',
          'SELECT * FROM MyDatabase.dbo.[QueryType2]'
       );

OPENDATASOURCE用于建立连接,其使用方式好像是名为转换的4部分的第一部分:

  

OPENDATASOURCE(provider_name,init_string)

例如:

SELECT 
    *  
FROM 
    OPENDATASOURCE('SQLNCLI','Data Source=London\Payroll;Integrated Security=SSPI')  -- Remote server / file
        .AdventureWorks2012 -- Database
        .HumanResources     -- Schema
        .Employee           -- Table

答案 1 :(得分:3)

您可以尝试以下操作。

SELECT * INTO dbo.[QueryType2_TBL]
FROM 
     OPENDATASOURCE
       (
          'SQLOLEDB', 
          'Data Source=MyDatabase;User ID=XXX;Password=XXXXX'
      ).MyDatabase.dbo.[QueryType2]

您可能需要检查Data SourceDatabase Name,您使用的是相同的名称。您的数据源应为ServerName / IP