Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2005 从SQL 2005链接服务器执行DB2 iSeries存储过程_Sql Server 2005_Db2_Linked Server_Ibm Midrange - Fatal编程技术网

Sql server 2005 从SQL 2005链接服务器执行DB2 iSeries存储过程

Sql server 2005 从SQL 2005链接服务器执行DB2 iSeries存储过程,sql-server-2005,db2,linked-server,ibm-midrange,Sql Server 2005,Db2,Linked Server,Ibm Midrange,我试图在MS SQL 2005中执行一个从链接数据库导出的存储过程。链接数据库是iseries服务器上的db2数据库。我正在使用iSeries IBMDASQL服务提供商。我能够使用简单的vbscript和ado查询存储过程,没有问题。当我尝试在SQL Server上的查询分析器中执行相同的存储过程时,我从未看到任何结果。查询分析器始终显示“已执行命令”,当我在临时表上执行select*时,不会显示任何值。我做错了什么????? 谢谢 -下面是查询分析器中的代码- DECLARE @emailT

我试图在MS SQL 2005中执行一个从链接数据库导出的存储过程。链接数据库是iseries服务器上的db2数据库。我正在使用iSeries IBMDASQL服务提供商。我能够使用简单的vbscript和ado查询存储过程,没有问题。当我尝试在SQL Server上的查询分析器中执行相同的存储过程时,我从未看到任何结果。查询分析器始终显示“已执行命令”,当我在临时表上执行select*时,不会显示任何值。我做错了什么????? 谢谢

-下面是查询分析器中的代码-

DECLARE @emailToAddress         char(50)
DECLARE @emailFromAddress       char(50)

set @emailToAddress = 'customer.service@company.com'
set @emailFromAddress = 'customer@gmail.com'

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 varchar8000 声明@emailToAddress varchar50 声明@emailFromAddress varchar50 设置@emailToAddress='客户。service@company.com' 设置@emailFromAddress=customer@gmail.com' SET@TSQL='SELECT*从OpenQueryMA400中,调用abicqual.VP_GETCCEPGMID'+@emailToAddress+','+@emailFromAddress++ 打印@TSQL EXEC@TSQL

-输出低于- 从OpenQueryMA400中选择*并调用abicqual.VP\u GETCCEPGMIDcustomer。service@company.com, customer@gmail.com' 信息7357,16级,状态2,第1行
无法处理对象调用abicqual.VP\u GETCCEPGMID'customer。service@company.com', 'customer@gmail.com'. 链接服务器MAM400的OLE DB提供程序IBMDASQL表示该对象没有列,或者当前用户对该对象没有权限。

请尝试使用。显示了将变量传递到OPENQUERY语句的示例。

结果表明,我使用的IBMDASQL提供程序存在许多问题。信不信由你,在ODBC驱动程序中使用Microsoft OLE DB提供程序更快、更可靠。使用此提供程序创建新的链接服务器后,我以前的所有sql尝试都正常工作。
干杯

通过链接服务器调用oracle过程函数并获取其结果返回值

--input parameters p1, p2, p3 declare @SQL nvarchar(1000) declare @param nvarchar(100) declare @result varchar(20) -- numbers may cause data type error -- (...custom actions, i.e. insert to local table) set @SQL = N'set @result = (select * from openquery(myLinkedServer, ''select OwnerName.Function_Insert(' + cast(@p1 as varchar) + ', ' + cast(@p1 as varchar) + ', ' + cast(@p3 as varchar) + ') from dual''))' set @param = '@result varchar output' EXEC sp_executesql @SQL, @param, @result output if @result '0' goto ERROR -- (...custom actions) return 1 -- OK ERROR: -- (...custom actions, i.e. delete from local table with(rowlock)) return 0 -- KO
我使用的是Microsoft DB2OLEDB提供程序,它是SQL 2005-2006年4月功能包的一部分。它也是主机集成服务的一部分。它使用DRDA Oracle风格的协议连接到AS/400

您可以单独下载它,但它只能安装在SQL standard、enterprise或developer not express上

我还发现,构建我想要在DB2/400框上运行的完整查询,然后将其包装成VARCHARMAX字符串,该字符串还包括SELECT*FROM OPENQUERY-linkedservername-,-DB2/400查询和参数,然后使用sp_execute或EXEC命令返回最佳结果


甚至可以在DB2/400 SQL过程中封装RPG代码,然后从MS SQL Server使用参数调用它们,并将任何结果集作为MS SQL表返回。

解决方案是在call语句周围添加括号。但是,除非您安装了分布式事务支持,否则您仍然无法在SQL Server端选择到表中。我不知道为什么它需要一个事务,但除非你有这个设置,否则它不会工作

EXEC'{CALL abicqual.VP_GETCCEPGMID?,?}',@emailToAddress,@emailFromAddress AT MAM400