문제

내가 노력하고 실행 저장 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 테이블.

을 사용하여 시험 OPENQUERY. 이 블로그 게시물 예를 보여줍니다 전달하는 변수로 OPENQUERY 문입니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top