2011-07-25 158 views
1

我正在调用OpenQuery中的存储过程并将参数传递给存储过程。在OpenQuery中调用参数化存储过程 - SQL Server 2008

declare @Src nvarchar(max),@Tgt nvarchar(max) 
declare @sql_str nvarchar (4000) 
set @Src = '$\VMT\Versions\0900\AMS\' 
set @Tgt = '$\VMT\Versions\0900\Base\' 
set @sql_str = 'exec [Tfs_VMT Collection].dbo.MergeCandidate ''' + @Src+ ''' , ''' [email protected]+''' ' 
set @sql_str = 'select * into #test from openquery(ODSSERVER,''' +Replace(@sql_str,'''', '''''') +''')' 

print @sql_str 

EXEC (@sql_str) 

但这种失败,以下错误

消息7357,级别16,状态2,行1
无法处理对象“执行[Tfs_VMT 收藏] .dbo.MergeCandidate“$ \ VMT \ Versions \ 0900 \ AMS \', '$ \ VMT \ Versions \ 0900 \ Base \'“。 链接服务器“ODSSERVER”的OLE DB提供程序“SQLNCLI10”指示对象没有 列或当前用户没有该对象的权限。

我检查了这与权限无关。

你能帮忙吗?

+0

因此,您尝试使用GRANT EXEC存储过程,这不会有帮助吗? – sll

+0

您可以取得Print @sql_str的值并成功运行它吗? – JeffO

+0

没有它给出了相同的错误 – Anirudh

回答

0

尝试从您的openquery查询中删除exec。您应该只能传入过程名称/参数。

​​
+0

尝试过但它抛出相同的错误:( – Anirudh

相关问题