2010-01-13 3 views
3

데이터 액세스 모드로 SQL 명령과 함께 OLE DB 원본을 사용하여 SQL Server 2005 데이터베이스를 쿼리하는 SQL Server Integration Services 프로젝트가 있습니다.SQL Server Integration Services - SQL 문에 매개 변수 추가

SQL 쿼리를 매개 변수화하려고하는데 구문이 @PARAM이 아니며 사용하려고합니까? 매개 변수를 클릭하면 "SQL 명령에서 매개 변수를 추출 할 수 없습니다."라는 오류 메시지가 나타납니다.

나는

SELECT * FROM [dbo].[TabledValuedFunction] (?) 

답변

1

그것이 제대로 구문 분석 할 수 있도록 등 매개 변수의 데이터 유형을 결정하는 데 필요한 모든으로 SSIS를 제공하지 않는 OLEDB 연결처럼 보이는 뭔가를하고 있어요 그것은 무엇이되어야 하는가 (이것은 내 부분에 대한 추측이다). 그러나 오류 메시지가 암시 하듯이 전체 SQL 명령을 변수에서 가져올 수 있습니다. 이전에 데이터 흐름으로 설정 한 문자열 변수가 필요합니다.

+1

내가보기에, 이것은 약간 disapointing 것 같습니다! – AJM

+0

DataReader 소스를 사용하면 더 많은 행운을 얻을 수 있을지 알고 있습니까? – AJM

+0

나는 똑같은 생각을 가지고 DataReader를 사용해 보았고 매개 변수를 전혀 사용할 수 없었습니다. 내가 더 나은 해결 방법을 찾으면 알려 드리겠습니다. –

0

ole db 소스에서 변수 매개 변수를 사용하여 동적 테이블, 동적 조건부 명령문 또는 동적 SQL 구문을 제공 할 수 있습니다. OLE DB 소스를 클릭하면 데이터 액세스 모드를 변경할 수 있습니다. 다음은 패키지 변수를 사용할 수있는 액세스 모드의 다른 유형에 대한 예제입니다.

parameterize table- 테이블 이름 또는 뷰 이름 변수를 사용하십시오. 그런 다음 유효한 테이블 이름이 들어있는 변수 이름을 선택하십시오.

매개 변수 조건부 구문 : use sql command. SQL 명령 텍스트는 다음과 같습니다. Select * From Table Where id =? 그런 다음 변수를 매핑하십시오.

변수의 동적 SQL : 변수의 sql 명령을 사용하십시오. Select * From Table

매개 변수화를 위해 무엇을 하려는지 확실하지 않았습니다. 몇 가지 가능성있는 옵션을 실행 해 보았습니다. 귀하의 특정 문제에 도움이되지 않습니다. 이게 도움이 되길 바란다.

7

동적 SQL 문을 작성할 때 표현식을 사용하면 훨씬 더 나은 행운을 얻었습니다. 그래서이 가상의 경우에 나는 2 개의 변수 Qry1과 Qry1Param1을 생성 할 것입니다.

는 Qry1 변수의 내부에서 나는

"SELECT * FROM [dbo].[TabledValuedFunction] where tbl_key = " + @[User::Qry1Param1] 

Qry1Param1 변수가 1 같은 것처럼 보이는 무언가를 창조하는 식 편집기를 사용합니다.

그래서 Qry1이

SELECT * FROM [dbo].[TabledValuedFunction] where tbl_key = 1 

에 평가하는 그런 다음 변수에서 SQL 명령의 데이터 액세스 모드를 사용하여 사용자 :: Qry1 변수에 입력 할 OLEDB 데이터 소스를 변경할 수 있습니다.

0

실행 SQL 작업 구성 요소를 어떻게 설정 했습니까? 방금 ​​시도했지만 제대로 작동합니다.

This is my ExecSql setting.

create function test1(@x int) 
returns @tbl table (x int) 
as begin 
while (@x > 0) 
begin 
    insert @tbl values(@x); 
    set @x-=1; 
end; 

return; 
end; 
go 
이 MSSQL2008, SSIS2008에서 테스트 :

이 내가 사용하는 기능입니다.

1

나는이 문제를 겪고 있었고, 일부 쿼리는 작동하지 않는 반면, 다른 쿼리는 실패 할 수 있다는 사실이 나를 미치게 만들었다. 저를위한 해결책은 SELECT *를 제거하고 명시 적으로 열을 지정하는 것이 었습니다. 다른 쿼리에서는 하위 쿼리를 제거해야했습니다. 기본적으로 OLEDB 공급자가 매개 변수 정보를 렌더링하는 데 필요한 모든 정보를 적절하게 구문 분석 할 수있을 때까지 쿼리를 작성/단순화해야합니다.

OLEDB 공급자가 더 자세한 설명 메시지를 반환 할 수없는 이유는 사람들이 패키지 변수 해결 방법에 의지 할 필요가없는 이유입니다.

관련 문제