2014-06-14 3 views
1

'OVER 절'문에 사용 된 행 수에 대한 변수를 사용하고 싶습니다. 지금까지는 SQL 문을 문자열로 생성 한 다음 실행 만하면됩니다.SQL Server에서 OVER 절에 변수를 사용하는 방법

최종 목적은 SSIS에서도 사용하는 반면 동적 쿼리의 필드는 인식하지 못하는 반면 작동하지 않습니다.

무엇 작동하는 것입니다 :

select 
    [GUID_Fund], [Date], [Close], 
    avg([Close]) over (order by [GUID_Fund], [Date] rows 7 preceding) as MA_Low 
from fundrates 
group by [GUID_Fund], [Date], [Close] 
order by [GUID_Fund] asc, [Date] desc; 

수 7 필요 내가 이런 일을하려고 그래서 변수로 :이 @var_MA_Low에서 구문 오류가 발생

declare @var_MA_Low as int; 

select distinct @var_MA_Low = [Value1] 
from Variables 
where [Name]='MA_Low'; 

select 
    [GUID_Fund], [Date], [Close], 
    avg([Close]) over (order by [GUID_Fund], [Date] rows @var_MA_Low preceding) as MA_Low 
from fundrates 
group by [GUID_Fund], [Date], [Close] 
order by [GUID_Fund] asc, [Date] desc; 

그냥 '행'이후. 같은 문은 위와 같이하지만, 내가 SSIS에 소스로 사용할 수있는 것보다 어떤 작품

:

declare @MA as nvarchar(max); 
declare @var_MA_Low as nvarchar(max); 
select distinct @var_MA_Low = [Value1] from Variables where [Name]='MA_Low'; 
set @MA = N'select [GUID_Fund], [Date], [Close], avg([Close]) 
     over (order by [GUID_Fund], [Date] rows '[email protected]_MA_Low+' preceding) as MA_Low 
    from fundrates 
    group by [GUID_Fund], [Date], [Close] order by [GUID_Fund] asc, [Date] desc;' 

execute sp_executesql @MA; 

아무도 어떻게 두 번째 옵션에 변수로 행 수를 통과하는 생각?

답변

0

작동중인 쿼리로 저장 프로 시저를 만들고 해당 SP를 원본으로 사용하면 어떻게됩니까?

+0

아직 가능성을 조사하지 않았습니다. 누군가가 SSIS에서 수행 할 수있는 T-SQL으로 수행 할 수있는 거의 모든 작업에 대해 언급하면서 SSIS 가능성을 조사하고 있습니다. 그래서 나는 가능한 한 SP의 사용을 피하려고 노력하고있다. – xSter

+0

나는 가능한 한 대안으로 SP를 시도했지만, 동일한 도전 과제가 남아 있습니다. SSIS 원본은 출력에 매핑 할 열을 검색 할 수 없습니다. – xSter

0

이 대답을 개선하려고 할 수도 있지만 동적 SQL을 사용하여 작동하는 솔루션을 가져 와서 임시 테이블과 "insert into ... exec ..."구문 (https://stackoverflow.com/a/24073229/3591870)과 결합하면 "select * from @holdertable"SSIS로 다시 돌아 오면 SSIS는 반환되는 열을 결정하고 원본을 생성 할 수 있어야합니다. 그러나 나는 이것을 해결하기 위해 동적 SQL을 사용해야한다는 사실을 정말로 좋아하지 않습니다.

문서에 따르면 http://msdn.microsoft.com/en-us/library/ms189461(v=sql.120).aspx에 따르면 실제로 "부호없는 정수 리터럴"이 지정되므로 동적 SQL이 유일한 방법이라고 생각합니다.

+0

감사합니다. 이것은 실제로 트릭을 할 것입니다. 이제 'Execute T-SQL Statement Task'와 'Data Flow Task'를 결합했습니다. 가장 멋진 솔루션은 아니지만 작동합니다. – xSter

+0

단일 데이터 흐름 작업에서만이 작업을 수행 할 수 있었어야합니다. –

관련 문제