推 cyr1216:推這篇寫法 01/22 02:10
※ 引述《Frank7301 (法國人)》之銘言:
: 新手我有練習要寫一個預存程序給一報表服務呼叫使用
: 可是怎麼輸入值雖然預存程序都正常跑完,但都跑沒資料出來
: 例子資料表和預存程序如下,請學長們幫忙看下是哪寫錯了,謝謝
: 1)資料表名稱:Customer_KA
: 客戶名稱 客戶編號 KACode
: 王大發小吃 10112 0
: 小美檳榔攤 50001 100
: 順天美容院 44111 33
: 玩具小舖 31311 0
: 2) 預存程序名稱:Rpt_KA
: Alter Proc [dbo].[Rpt_KA]
: @CustKA nvarchar(4)
: AS
: BEGIN
: SET NOCOUNT ON;
: DECLARE @KA nvarchar(4)
: SET @KA = CASE WHEN @CustKA='All' THEN 'LIKE ' + '''%%'' ' --列出全部
: WHEN @CustKA='GT' THEN 'IN(0,100)' -- 列出KACode等於或
: WHEN @CustKA='KA' THEN 'NOT IN(0,500)' -- 列出KACode非或
: END
: SELECT * FROM Customer_KA
: WHERE KACode=@KA
: END
: 3)問題
: 然後我每次執行SQL畫面都沒有結果?!
: 如 我下EXEC Rpt_KA 'GT' 應該要跑出下面三筆才對!
: 1 王大發小吃 10112 0
: 2 小美檳榔攤 50001 100
: 3 玩具小舖 31311 0
@KA是個字串
你這個執行會變成
SELECT * FROM Customer_KA WHERE KACode='in(0,100)'
就算對了語法也不通XD
一種方法是用這種方式
if @CustKA = 'ALL'
select * from Customer_KA
else if @CustKA = 'GT'
select * from Customer_KA where KACode in (0,100)
else ....
要用拼貼的話就用
Declare @STR varchar(1000)
SET @KA = CASE WHEN @CustKA='All' THEN 'LIKE ' + '''%%'' ' --列出全部
WHEN @CustKA='GT' THEN 'IN(0,100)' -- 列出KACode等於或
WHEN @CustKA='KA' THEN 'NOT IN(0,500)' -- 列出KACode非或
SET @STR="SELECT * FROM Customer_KA WHERE KACode " + @KA
EXEC(@STR)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.117.41.57