mssql where문 안의 if문 질문입니다 0 3 1,260

by 지메이비 MSSQL [2022.10.12 14:19:18]


		set @qry=@qry+char(13)+'union all '
		set @qry=@qry+char(13)+'SELECT '
		set @qry=@qry+char(13)+'	a.sellerCode,'
		set @qry=@qry+char(13)+'	a.materialcode, '
		set @qry=@qry+char(13)+'	a.storeCode, '
		set @qry=@qry+char(13)+'	a.stockinday, '
		set @qry=@qry+char(13)+'	dbo.uf_storeName(a.dealercode,a.storeCode) as storeName, '
		set @qry=@qry+char(13)+'	b.materialname, '
		set @qry=@qry+char(13)+' FROM orders a inner join material b  '
		set @qry=@qry+char(13)+'	on(a.dealercode=b.dealercode'
		set @qry=@qry+char(13)+'	and a.materialcode=b.materialcode '
		set @qry=@qry+char(13)+'    AND a.orders_restrictCount<>b.restrictCount'
		set @qry=@qry+char(13)+'	and b.isUse=''Y'') '		
		set @qry=@qry+char(13)+' WHERE a.dealerCode='''+@A_dealerCode+''' '
		if(len(@A_SellerCode)>0)
		begin
			set @qry=@qry+char(13)+' AND a.sellerCode='''+@A_SellerCode+''' '
		end
		if(len(@A_StoreCode)>0)
		begin
			set @qry=@qry+char(13)+' AND a.storeCode='''+@A_StoreCode+''' '
		end

 

이 쿼리문하고 (생략한거입니다)

 

select    dealerCode, storeCode, stockInDay
             from    orders
             where    dealerCode=@A_dealerCode
            if(@A_storeCode != 'zz')
            begin
                and storeCode = @A_storeCode
            end

 

이 쿼리문하고 차이가 뭐죠?

위에 쿼리문은 where안에 if를 쓸수있는데

밑에 쿼리는 사용이안됩니다..

by 마농 [2022.10.12 15:14:38]

1번(동적쿼리) : SQL 구문을 동적으로 만들어 수행하는 것이고
2번(정적쿼리) : 그냥 SQL 입니다.
1번의 IF 문은 SQL 구문이 아니고 T-SQL 구문입니다.
SQL : 구조적 질의어, (집합적 질의어)
T-SQL : SQL 의 기능을 확장하여 절차적 처리가 가능하게 한 언어(절차적 프로그램 언어)


by 지메이비 [2022.10.12 15:35:02]

그러면 그냥 sql문에서는 if문이 사용이 안되고 사용을 하려면 T-SQL문 형식으로 바꿔야한다는 말씀이시져?


by 마농 [2022.10.12 16:16:13]

"T-SQL문 형식으로 바꿔야한다" 라고 한정지으면 안됩니다.
원하는 기능을 구현하는데 있어서
SQL 로 구현하든, T-SQL 로 구현 하든 상관이 없습니다.
 

SELECT dealerCode
     , storeCode
     , stockInDay
  FROM orders
 WHERE dealerCode = @A_dealerCode
   AND (  (@A_storeCode  = 'zz'                             )  -- 전체검색
       OR (@A_storeCode != 'zz' AND storeCode = @A_storeCode)  -- 부분검색
       )
;
SELECT dealerCode
     , storeCode
     , stockInDay
  FROM orders
 WHERE dealerCode = @A_dealerCode
   AND @A_storeCode  = 'zz'  -- 전체검색
 UNION ALL
SELECT dealerCode
     , storeCode
     , stockInDay
  FROM orders
 WHERE dealerCode = @A_dealerCode
   AND @A_storeCode != 'zz'  -- 부분검색
   AND storeCode = @A_storeCode
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입