2017-12-04 18 views
0

Data Flow Task에 연결된 Expression Task이있는 SSIS 패키지를 만듭니다.SQL 명령에 1 개의 매개 변수가 필요하지만 변수 매핑에서 SSIS를 사용하면 OLE DB 원본과 SQL 명령을 사용할 때만 0이됩니다.

@[User::DateVariable] = year(DATEADD("day", - @[$Project::DaystoReload] , getdate()))*10000

OLE DB Source가 소스로 SQL Command from Variable 사용하고, 그것은 성상이 있습니다 :

익스프레션 작업은

"나라, 인구, 지역, 날짜를 선택

을 INNER JOIN [ "+ @ [User :: DatabaseName] +"]. [dbo]. [Country] 여기서 Date> =? "

사용자 :: 데이터베이스 이름이 EvaluateAsExpression 인 경우 문자열이며, 문자열입니다. 데이터 흐름 전에 식 작업에서 만든 DateVariable 작업의 데이터 형식은 Int32입니다.

나는 SSMS에서 쿼리를 사용하고, 나는 표현 작업이 나는 올바른 출력을 얻을 다음 "하드 코딩"을 DateVariable을 평가 값을 사용하지만, SSIS에서 나는 오류가 발생하면 그

SQL 명령은 1 개 매개 변수를 필요로하지만, 나는이 문제를 Google에 노력했습니다 0

매개 변수 매핑은 가지고 있지만, 나는 OLE DB SourceSQL Command from Variable를 사용하는 경우에 대한 해결책을 찾을 것이 아니라 단지 SQL command에서하지 않은이라는 옵션이 있습니다.당신이 매개 변수에 매핑 할 수 있습니다. 변수에서 SQL 명령을 사용하여 이러한 옵션을 찾지 못했습니다.

누구든지 이에 대한 통찰력을 갖고 있습니까?

+0

, 왜 당신을 그냥 해달라고 : 이미 날짜 변수 안에 값을 저장하기 때문에, 그래서 SQL 변수는 다음과 같이해야한다

을 사용할 수 있어야한다 write Date> = "+ @ User :: DATEVARIABLE – plaidDK

답변

3

변수를 통해 SQL 명령을 사용하여 OLEDB 원본에 매개 변수를 전달할 수 없습니다.

대신 변수를 전달해야합니다. 당신의 변수가 이미 전에 채워집니다 때문에

"SELECT Country, Population, Region, Date 

INNER JOIN [" + @[User::DatabaseName] + "].[dbo].[Country] where date >= "+ (DT_WSTR,20)@[User::Date] 
+0

SQL Server에서 데이터 형식이 int이고 데이터 형식이 int32 인 SSIS의 날짜가 있습니다. SQL 쿼리 변수 내에서 'User :: DateVariable'을 사용하는 데 어려움이있었습니다. @ + [User :: DateVariable] + "','+ @ [User :: DateVariable] + '를 사용하여 시도했지만 '+'를 사용하면 정수 변수를 사용하지 않을 것이라는 오류가 나타납니다. 솔루션, 그리고 내 정수 변수와 함께 실패하는 참조하십시오. – Cenderze

+0

내가 쓴 것처럼. (DT_WSTR, 20) VARIABLE - 직접 테스트했는데 int 변수를 사용하면 문제가 없습니다. – plaidDK

+0

그 차이점이 있다는 것을 알았고 테스트를 거쳤습니다. 감사! – Cenderze