再向存储过程高手求助

csharpboy 2002-04-09 10:13:17
昨日在此提一存储过程问题(http://www.csdn.net/expert/topic/631/631108.xml?temp=.5915491)
后幸得N_chow(一劍飄香++) 等高手指点,今又遇到问题,用昨日方法不能解决这个问题,原因在于CASE只能对值进行操作,而不能对语句块进行操作,请高手指点,我的意图是在存储过程拼合sql语句,而不希望是定义一字符串变量,拼合后exec()
以下是我的存储过程:
DECLARE
@CusName NVarChar (50),
@CityName NVarChar (40),
@LinkManName NVarChar (50),
@CusSize SmallInt,
@CusIndu Int,
@Stuff Int
select @CusName=''
select @CityName=''
select @LinkManName=''
select @CusSize=0
select @CusIndu=0
select @Stuff=0

SELECT distinct cus_ID,stf_ID,cus_Name,cus_Country,cus_State,cus_City,cus_Address,cus_ZipCode,cus_InduType,cus_Size,cus_Telphone,cus_Fax,cus_Email,cus_WebPage,cus_ShopNo,cus_BankName,cus_BankNo
FROM CustomerContact
WHERE cus_Name like + '%' + @CusName +'%'
and cus_City like + '%' + @CityName + '%'
//以下是我不能解决的地方,当@LinkManName为空时,我就不想有and cta_Name like....这段条件,不想用以下方法,因为有难言的原因,因为表之间的关系
and cta_Name like
CASE @LinkManName
WHEN '' THEN cta_Name
Else '%' + @LinkManName + '%'
END
//------------------------------------------
and cus_Size=
CASE @CusSize
WHEN 0 THEN cus_Size
ELSE @CusSize
END
and cus_InduType=
CASE @CusIndu
WHEN 0 THEN cus_InduType
ELSE @CusIndu
END
and stf_ID=
CASE @Stuff
WHEN 0 THEN stf_ID
ELSE @Stuff
END
GO
...全文
31 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
windindance 2002-04-11
  • 打赏
  • 举报
回复
declare @cmd varchar(8000)
if (@LinkManName is NULL or @LinkManName = '')
...
else
set @cmd = 'select * from ...' + 'where LinkManName = "%' + @LinkManName + '%"'

exec @cmd
xhfjy 2002-04-11
  • 打赏
  • 举报
回复
那你想怎么样做呀?
csharpboy 2002-04-11
  • 打赏
  • 举报
回复
可是我不希望是定义一字符串变量,拼合后exec()
yinzhen 2002-04-11
  • 打赏
  • 举报
回复
declare @sql varchar(3000)
declare @title varchar(10)
set @title=''
set @sql='select * from titles Where 1=1 '+(case when @title= '' then ' and Title_id=''Bu1032''' else ' And Tilte_ID=''BU1111''' end)
exec (@sql)

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧