2015-01-27 1 views
0

다음 쿼리가 작동합니다. 그러나 쿼리 변수를 로컬에서 정의한 변수에 할당하기 위해 주석 처리 된 행의 주석을 제거하면 마지막 ";"에서 구문 오류가 발생합니다.변수에 할당 된 값을 사용할 때 T-SQL 쿼리가 오류를 발생합니다.

DECLARE @tmp_total_ct int = 0; 
DECLARE @tmp_closed_ct int = 0; 

--SELECT @tmp_total_ct = tot_ct, @tmp_closed_ct = cls_ct 
-- FROM (
     SELECT COUNT(*) AS tot_ct, 
     SUM(IIF(is_closed = 1, 1, 0)) AS cls_ct 
       FROM corp.CashDealDetails 
       INNER JOIN WidgeStores wstrs 
        ON corp.CashDealDetails.abbrev = wstrs.abbrev 
       WHERE mall_id IN 
       (SELECT mall_ndx FROM WidgeStores wstrs 
        WHERE wstrs.abbrev IN 
         (SELECT abbrev FROM @tmpMkts) 
        AND wstrs.[is_opn] = 1 
       ) 
       AND YEAR(closing_dt) = 2012 
     --); 

나는 이러한 스레드의 다른 게시물에 설명 된대로 내가, 사용자 정의 변수에 쿼리 값을 할당하기위한 올바른 구문을 사용하고 있다고 생각합니다. 구문 오류가 정확히 어디에 있습니까?

+2

별칭 기본 하위 쿼리 – JimmyV

답변

2
declare @tmp_total_ct int 
declare @tmp_closed_ct int 

SELECT @tmp_total_ct = tot_ct, @tmp_closed_ct = cls_ct 
    FROM (
     SELECT COUNT(*) AS tot_ct, 
     SUM(IIF(is_closed = 1, 1, 0)) AS cls_ct 
       FROM corp.CashDealDetails 
       INNER JOIN WidgeStores wstrs 
        ON corp.CashDealDetails.abbrev = wstrs.abbrev 
       WHERE mall_id IN 
       (SELECT mall_ndx FROM WidgeStores wstrs 
        WHERE wstrs.abbrev IN 
         (SELECT abbrev FROM @tmpMkts) 
        AND wstrs.[is_opn] = 1 
       ) 
       AND YEAR(closing_dt) = 2012 
) a 

print @tmp_total_ct 
print @tmp_closed_ct 
+1

감사! 그랬어. 명확하게하기 위해 할당의 변수에 접두어로 하위 쿼리 별칭을 추가했습니다. 그래서, "a.tot_ct"와 "a.cls_ct". 그러나 SQL Server에는이 기능이 필요하지 않습니다. – Buggieboy

+1

그래도 필요없는 경우에도 더 명확하게 만들 때마다 항상 별칭을 사용하려고합니다! – JimmyV