我正在尝试从 MS SQL 2005 中的链接数据库执行存储过程。链接数据库是 iseries 服务器上的 db2 数据库。我正在使用 iSeries IBMDASQL 服务提供程序。我可以使用简单的 vbscript 和 ado 毫无问题地查询存储过程。当我尝试在 SQL Server 上的查询分析器中执行相同的存储过程时,我从未看到任何结果。查询分析器始终显示“已执行命令”,当我在临时表上执行 select * 时,不会出现任何值。我究竟做错了什么????? 谢谢!
--下面查询分析器的代码--
DECLARE @emailToAddress char(50)
DECLARE @emailFromAddress char(50)
set @emailToAddress = '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="8be8fef8ffe4e6eef9a5f8eef9fde2e8eecbe8e4e6fbeae5f2a5e8e4e6" rel="noreferrer noopener nofollow">[email protected]</a>'
set @emailFromAddress = '<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="15766066617a787067557278747c793b767a78" rel="noreferrer noopener nofollow">[email protected]</a>'
If Object_ID('tempdb..#tmpResultTbl') Is Not Null
Drop Table #tmpResultTbl
Create Table #tmpResultTbl
(
OUTPGMID Char(150))
--SET FMTONLY Off
Set NoCount On
Insert Into #tmpResultTbl
EXEC ('CALL abicqual.VP_GETCCEPGMID(?, ?) ', @emailToAddress, @emailFromAddress) AT MAM400
Select * From #tmpResultTbl
更新: 这是使用 openquery 的更新代码...仍然没有运气:(
声明@TSQL varchar(8000) 声明 @emailToAddress varchar(50) 声明 @emailFromAddress varchar(50) SET @emailToAddress = '[email protected] ' SET @emailFromAddress = '[email protected] ' SET @TSQL = 'SELECT * FROM OPENQUERY(MAM400,''CALL abicqual.VP_GETCCEPGMID(''''' + @emailToAddress + ''''', ''''' + @emailFromAddress + '''''' + ')''' + ')' 打印@TSQL 执行(@TSQL)
--输出如下-- SELECT * FROM OPENQUERY(MAM400,'CALL abicqual.VP_GETCCEPGMID('' [email protected] '', '' [email protected] '')') 消息 7357,16 级,状态 2,第 1 行 无法处理对象“CALL abicqual.VP_GETCCEPGMID(' [email protected] ', ' [email protected] ')”。链接服务器“MAM400”的 OLE DB 提供程序“IBMDASQL”指示该对象没有列,或者当前用户对该对象没有权限。
最佳答案
事实证明,我使用的 IBMDASQL 提供程序存在许多问题。不管您是否相信,使用 Microsoft OLE DB Provider for ODBC 驱动程序会更快、更可靠。使用此提供程序创建新的链接服务器后,我之前的所有 sql 尝试都正常工作。 干杯!
关于sql-server-2005 - 从 SQL 2005 链接服务器执行 DB2 iSeries 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/329051/