我正在使用SQL Server 2014
,并且有以下T-SQL
查询,该查询应该将Select
中View
语句的输出插入到{{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是数据库中不存在的表。我是在正确执行操作还是在执行另一种方法?
答案 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 Source
和Database Name
,您使用的是相同的名称。您的数据源应为ServerName / IP