2009-02-27 2 views
4

에 매개 변수 값을 전달하는 방법 : 입력 매개 변수를 전달하는 방법을 나는 확실하지 않다내가 SQL 서버 2005 (관리 Studio IDE)에서 다음 T-SQL 쿼리를 사용하여 오전 T-SQL 쿼리

DECLARE @id int; 
DECLARE @countVal int; 
DECLARE @sql nvarchar(max); 
SET @id = 1000; 
SET @sql = 'SELECT COUNT(*) FROM owner.myTable WHERE id = @id'; 
EXEC (@sql) AT oracleServer -- oracleServer is a lined server to Oracle 

@id를 EXEC 쿼리에 추가하고 카운트 결과를 @countVal로 전달합니다. 내가 좋아하는 마이크로 소프트 SQL 서버에 대한 몇 가지 예 보았다 : 나는 오라클이 시도

EXEC (@sql, @id = @id) 

을하지만 난 문 오류 가지고 :

OLE DB provider "OraOLEDB.Oracle" for linked server "oracleServer" 
returned message "ORA-00936: missing expression" 

답변

14

이 시도 할 수 :

EXEC sp_executesql @sql, N'@id int', @id 
이 위대한 기사에서

더 많은 정보 : 출력에 관해서는 http://www.sommarskog.se/dynamic_sql.html


, 당신의 선택 필요 다음과 같이 보입니다.

0 내가 대신 불필요한 데이터를 당겨 방지하는 '*'의 'ID'을 선택하고있어
SELECT @countVal = COUNT(id) FROM owner.myTable WHERE id = @id 

...

그런 다음 동적 SQL이 같은해야한다 :이 예는 적응

EXEC sp_executesql @sql, 
        N'@id int, @countVal int OUTPUT', 
        @id, 
        @countVal OUTPUT 

위에 링크 된 동일한 기사의 섹션 sp_executesql에서


오라클 오류로 인해 sp_executesql이 Oracle에 보내는 정확한 SQL을 찾아야합니다. Oracle에 프로파일 러 또는 쿼리 로그가 있으면 도움이 될 수 있습니다. 필자는 오라클 경험이 제한적이지만 문제 해결을위한 다음 단계 일 것입니다.

+0

EXEC() 예제는 Oracle에서 작동하지 않습니다. 매우 슬프다. @sql의 매개 변수가 없다면 정상적으로 실행됩니다. 필자는 SQL에 출력 매개 변수가있는 Oracle 데이터베이스에 대한 통과 쿼리를 사용할 단서가 없습니다. –

+0

SET @sql = '선택 하시겠습니까? = count (*) from owner.mytable '; oracleServer의 exec (@sql, @countVal 출력) - Oracle의 경우 오류 –

+0

이 접근법의 문제점은 임시 테이블을 작성하지 않고 다른 저장 프로 시저에서 결과 세트를 리턴 할 수 없다는 것입니다 (가능하지 않음). 동적 쿼리와 함께) ...이 기능을 않는가? –

0

별도로 패스 ID 왜 모르겠어요합니다.

다음
SET @sql = 'SELECT COUNT(*) FROM owner.myTable WHERE id = ' + @id

+0

입력 매개 변수는이 방법으로 괜찮지 만 그 결과는 어떨까요? –

0

빠르고 쉬운 방법은 EXEC 문을 사용하기 전에 문자열을 작성하는 것입니다.하지만 SQL 주입까지 열어 두는 것이 좋습니다.

DECLARE @id int; 
DECLARE @countVal int; 
DECLARE @sql nvarchar(max); 
SET @id = 1000; 
SET @sql = 'SELECT COUNT(*) FROM owner.myTable WHERE id = ' + @id 
EXEC (@sql) AT oracleServer -- oracleServer is a lined server to Oracle 

이 작업을 수행하는 올바른 방법은 마그로 설명하고, 온라인에서 Microsoft에서 권장하는대로 시스템 저장 프로 시저에서 sp_executesql을 사용하는 것입니다,

EXEC sp_executesql @sql, N'@id int', @id