感谢您浏览我的帖子。
在查询页面中有一个文本框,可输入值进行查询,并且输入值中以逗号分开,可以实现联合查询。
比如:“姓名”字段输入:刘小华,陈小刚
那么查询后,结果可以显示为刘小华、陈小刚两条记录。
这样的话,存储过程就不能固定参数个数,用户可能输入一个或者几个参数,请教这样的存储过程该怎样写!
在查询页面中有一个文本框,可输入值进行查询,并且输入值中以逗号分开,可以实现联合查询。
比如:“姓名”字段输入:刘小华,陈小刚
那么查询后,结果可以显示为刘小华、陈小刚两条记录。
这样的话,存储过程就不能固定参数个数,用户可能输入一个或者几个参数,请教这样的存储过程该怎样写!
解决方案 »
- 如何在vs2010中创建WPF Browser Application项目
- WPF下能不能在控件里打开一个新程序?
- \u开头的编码转换问题
- 刚学泛形 问些问题
- 如何能让datagrid的记录能修改的同时,不能添加呢?
- 急!!!谁做过C# office project二次开发的???
- 水晶报表问题
- 一个 showModalDialog 的简单问题! 点击进入>>>>>>>>>>>>>>>>>>>
- .NET技术交流资源共享-------------群------------7991387一起学习一起进步!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 主从关系
- 哪有Object Oriented Concepts in C#的中文版
- 请问一下怎样编写Combobox的双击事件,为什么它的属性中的DoubleClick 事件不起作用,没有反应?
将SQL语句的条件循环添加
我是说存储过程参数不固定,而不是只是查询两个参数。TO: yaopeng117(尋找屬於自己的道,堅定不移的走下去。)
能说的具体点吗?
只是为了方便用户可以一次性输入自己所要查询的条件,就可以查出自己所有想要看到的信息TO:zhangguochen(中和)
不用存储过程确实可以,用递归的SELECT语句在C#程序中可以实现。但是为了安全,我所有的数据操作只能用存储过程,所以在这里跟大家讨论。
2、扩展存储过程。
3、需求变化不是很大的时候,理论上讲用T-SQL可以实现,不过,非常非常非常的麻烦。
@str = '姓名 = ''' + replace(@str, ',', ''' or 姓名 = ''') + ''''
结果:
姓名 = '刘小华' or 姓名 = '陈小刚'
你的法子需要用户输入精确的值,比如:输入刘小华,陈小刚可以,当时如果输入刘,陈,就不行了,呵呵
还请详加指教。TO:lufancy(奇闻共欣赏,异议相与析)
用变量来作为SQL语句的一部分,是不可以的。
刚才的回复全没有了
CSDN 赔偿~我想到2种方法
1。用动态sql,将名字组合起来~ 但这样速度会比较慢
2。考虑用表变量(或临时表)
例如可以传参数'allan|john|kenny|kelly|'然后用自定义函数取出来
放到表变量里面 再关联就可以了参考:
CREATE FUNCTION [dbo].[code_split] (@str varchar(8000),@i int)
RETURNS varchar(30) AS
BEGIN declare @intCurPost int
declare @IP varchar(30)
declare @zero int
declare @len int
set @zero=0
-- 'ddddddddd#^ddddddddd#^dddddddd#^ssssssssss#^dddddddddd' -- set @intCurPost=charindex('#^',@str)
-- if @intCurPost>0
while @i >=@zero
begin
set @intCurPost=charindex('|',@str,0)
if(@intCurPost>0)
begin set @IP=substring(@str,1,@intCurPost-1);
set @zero=@zero+1
if(@zero=@i)
break set @len=len(@str) set @str=right(@str,@len-@intCurPost)
end
else
begin if @i=@zero+1
begin
set @IP=@str
break
end
else
begin
set @IP='#^error#^'
break
end
end
END
return @IPEND
非常感谢你的帮助可能我没有表达清楚,或者对数据库操作还比较肤浅实际上,我希望在存储过程中最后形成这样的SQL语句:
select * from 表 where (name like '%刘小华%') and (name like '%陈%') and (name like '%...这样的话,我从C#中产生READER就可以读取这些数据。当时难题就在用户输入的参数不固定,可能是一个或者几个,甚至有的参数只是记录内容的一部分,所以要实现动态参数输入。头疼的地方就在这里
拆开可以,可是怎样合成一条SELECT语句呢?
最好用表变量(临时表)的关联来实现如果非要这样 可以考虑用动态sql 来实现@paramexec ('http://210.77.155.240/regBeta2/regservice.asmx '+
@param)
@param ,you may build it from the page
看来也只有这种方式可以一试了非常感谢各位的回复!!!
declare @sql nvarchar(1000)
declare @sql_temp nvarchar(100)
set @sql_temp='company_id=14 or company_id=15'
set @sql='select * from company where'
set @sql=@sql+@sql_temp
exec sp_executesql @sql
请帮我看看这段代码错在哪里?
提示错误:
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: '=' 附近有语法错误。
文章所描述的解决方法跟我要求的不是一码事
谢谢大家
首先在程序中把name文本框中的值变成:
(name like '%'+'刘'+'%') and (name like '%'+'陈'+'%') and (name like '%'+...
然后传入存储过程参数@name
@sql='select * from [name] where '
@sql=@sql+@name
exec sp_executesql @sql
即可尽管这个存储过程写的很麻烦(耗费了一天时间),不过,我从中学到很多东西,感谢大家的帮助!