作者twoseven (Tse)
看板Database
标题Re: [SQL ] 请教预存程序使用参数
时间Fri Jan 6 13:13:10 2012
※ 引述《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
1F:推 cyr1216:推这篇写法 01/22 02:10