실행 DB2iSeries 저장된 절차에서 SQL2005 연결된 서버
-
11-07-2019 - |
문제
내가 노력하고 실행 저장 procedured 에서 링크된 데이터베이스에서 MS SQL2005.연결된 데이터베이스 db2 데이터베이스에 iseries 서버입니다.내가 사용하 iSeries IBMDASQL 서비스 공급자입니다.나를 쿼리할 수 있지 않고 저장 프로시저를 사용하여 문제를 간단하 vbscript 및 ado.을 때 나를 실행하려고 같은 저장된 절차에 따라 쿼리 분석기에서 SQL 서버가 어떤 결과입니다.쿼리 분석기는 항상 표시'명령을 실행'과 때 실행하는 선택*에 temp table,아무 값이 나타납니다.무엇이 잘못된 것입니까?????감사합니다!
--코드 쿼리 분석기에서 아래--
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
UPDATED:여기에 업데이트 코드를 사용하 openquery...습니다:(
선@TSQL varchar(8000) 선@emailToAddress varchar(50) 선@emailFromAddress varchar(50) SET@emailToAddress='customer.service@company.com' SET@emailFromAddress='customer@gmail.com' SET@TSQL='SELECT*FROM OPENQUERY(MAM400,"CALL abicqual.VP_GETCCEPGMID(""'+@emailToAddress+ ""', ""' + @emailFromAddress+ """ + ')"' + ')' 인쇄@TSQL EXEC(@TSQL)
--출력이 아래-- SELECT*FROM OPENQUERY(MAM400,'전화 abicqual.VP_GETCCEPGMID("customer.service@company.com","customer@gmail.com")') Msg7357,수 16,State2,Line1 할 수 없는 프로세스 개체"CALL abicqual.VP_GETCCEPGMID('customer.service@company.com','customer@gmail.com')".OLE DB 공급자"IBMDASQL"연결된 서버"MAM400"나타내는 개체는 열이 없거나 현재 사용하지 않습에 대한 권한이 있는 객체입니다.
해결책
밝혀 있다는 것이 문제의 번호와 함께 IBMDASQL 공급자가 사용하고 있었다.그것을 믿거나 말거나 그것은 더 빠르고 믿을 수 있는 사용하기 위하여 Microsoft OLE DB Provider for ODBC 드라이버가 있습니다.후 새로 만드는 연결된 서버를 이 업체로,나의 모든 이전 sql 시도 합니다.Cheers!
다른 팁
내가 사용하여 Microsoft DB2OLEDB 공급자의 일부로 사용할 수 있는 기능 팩에 대한 SQL2005-April2006.그것은 또한 일부의 호스트에 통합 서비스입니다.그것은 갈 AS/400 를 사용하 DRDA(Oracle 스타일)프로토콜입니다.
다운로드할 수 있습니다 그것은 따로따로 있지만 그것은 단지 설치에 SQL 표준,기업 또는 개발자(not express).
또한 찾을 구축을 완료하는 쿼리가 실행하는 DB2/400 자인을 선보이고 있는 포장에 VARCHAR(MAX)문자열을 포함한"SELECT*FROM OPENQUERY(--linkedservername--,DB2/400 쿼리와 params--)"다음 사용하 sp_execute 또는 EXEC 명령을 반환합니다 최고의 결과입니다.
그것도 가능해 랩까지 롤 플레잉 코드 내에서 DB2/400SQL 절차와 그 다음 그들을 부르다(params)에서 MS SQL Server 및 반환하는 모든 결과로 설정되 MS SQL 테이블.
oracle 절차(function)를 통해 연결된 서버를 얻을 결과(return value)
--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
솔루션을 추가하는 것이 대괄호 주위로 전화 문입니다.당신은 여전히지 않을 것을 선택할 수 있으로 테이블에서 SQL 서버의 끝도 없으면 설치에 대한 지원이 분산 트랜잭션이 있습니다.내가 왜 필요한 트랜잭션이지만,그것은 작동하지 않을 것이 없으면 이 설정합니다.
EXEC('{CALL abicqual.VP_GETCCEPGMID(?, ?)}', @emailToAddress,@emailFromAddress)에 MAM400