我正在尝试从支持仅连接到表和视图的应用程序运行存储过程。我的解决方法是使用通过 Openrowset() 从 SP 获取结果的视图。结果表明,SP 使用#temp 表来存储中间结果,这是一个 DDL 操作,似乎不支持分布式查询。我可以用@temp 表变量替换#temp,但它会大大减慢整个代码的速度(我使用批量插入(从t1 中选择* 到#temp)来加快速度)。
我收到的错误消息是
无法处理对象“exec DW.dbo.TestSpWithTempTable”。链接服务器“(null)”的 OLE DB 提供程序“SQLNCLI10”表示该对象没有列,或者当前用户对该对象没有权限。
无论如何我可以在SP中使用#temp表并使用OpenRowSet从视图中调用它吗?
CREATE PROC TestSpWithTempTable
AS
Select distinct TxnType into #txnTypes from Transactions
-- lot of other stuffs going on here
select TxnType from #temp
GO
我创建的视图是:
CREATE VIEW SelectDataFromSP
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=(local);TRUSTED_CONNECTION=YES;',
'exec DW.dbo.TestSpWithTempTable') AS a
有效但缓慢的代码是
CREATE PROC TestSpWithTempTable
AS
declare @TxnTypes table(TxnType varchar(100))
insert into @TxnTypes
Select distinct TxnType from Transactions
-- lot of other stuffs going on here
select TxnType from @TxnTypes
GO