看板 Database 關於我們 聯絡資訊
※ 引述《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
cyr1216:推這篇寫法 01/22 02:10