创建一个查询的存储

HenryXiaoY 2004-10-19 11:49:59
现有一张表,里面有多个字段,建立一个存储,能基于每个字段查询。
表名TTT
字段名:
T1 [varchar(8)] ,T2 [varchar(50)],T3 [varchar(200)]
就象下面这样:
Create Proc GetData @FieldNo int,@Condition VarChar(50) As
--@Condition是输入的查询条件
--@FieldNo 如果输入1,就按T1来查,输入2就按T2查,3按T3查

Declare @FieldName varchar(20)
set @FieldName=
( case @FieldNo
when 1 then 'T1'
when 2 then 'T2'
when 3 then 'T3'
end )
Select * from TTT
where CharIndex(@Condition,@FieldName)>0
Go

但是这个存储始终查不到数据,是什么原因?各位高手指点一下,或是写一个能实现这个功能的过程也可以,谢谢了!!!
...全文
113 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
老宛 2004-10-19
  • 打赏
  • 举报
回复

Select * from TTT
where CharIndex(@Condition,@FieldName)>0
改成
exec('Select * from TTT where CharIndex('''+@Condition+''','+@FieldName+')>0')
yjdn 2004-10-19
  • 打赏
  • 举报
回复
CharIndex(@Condition,@FieldName)>0--在你的语句中,@FieldName变成了'T1'等等,
是一个字符串,而不是一个字段名.
yjdn 2004-10-19
  • 打赏
  • 举报
回复
用动态SQL语句解决
Create Proc GetData @FieldNo int,@Condition VarChar(50) As
--@Condition是输入的查询条件
--@FieldNo 如果输入1,就按T1来查,输入2就按T2查,3按T3查
Declare @FieldName varchar(20) ,
declare @sql varchar(8000)

set @FieldName=
( case @FieldNo
when 1 then 'T1'
when 2 then 'T2'
when 3 then 'T3'
end )
set @sql='Select * from TTT
where CharIndex('+@Condition+','+@FieldName+')>0'
exec(@sql)
Go
WangZWang 2004-10-19
  • 打赏
  • 举报
回复
最后一句改为:
exec('Select * from TTT
where CharIndex('+@Condition+','+@FieldName+')>0')
lightJing 2004-10-19
  • 打赏
  • 举报
回复
Select * from TTT
where CharIndex(@Condition,case @FieldNo
when 1 then T1
when 2 then T2
when 3 then T3
end )>0
HenryXiaoY 2004-10-19
  • 打赏
  • 举报
回复
问题终于搞明白了,原来一个变量中引用另一个变量要用三个''' ,象'''@Condition'''这样。
另外就是这样查询会不会有性能的影响?
谢谢了,马上揭贴!

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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