如下:
create procedure dd
(
@fabu varchar(20),
@rjbb varchar(20),
@czxt varchar(20)
)
as
declare @sql varchar(8000)
set @sql = 'select title,rjbb,case fabu
when ''1'' then ''aa''
when ''2'' then ''bb''
when ''3'' then ''cc''
when ''4'' then ''dd''
end as fabu from zsgx where 1= 1 and fabu=' +@fabu if(len(ltrim(rtrim(@rjbb))) >0)
set @sql = @sql + ' and rjbb ='+ @rjbbif(len(ltrim(rtrim(@czxt))) >0)
set @sql = @sql + ' and czxt ='+ @czxt exec(@sql)
如果执行exec dd @fabu=2,@rjbb='',@czxt='',没有问题,如果执行exec dd @fabu=2,@rjbb='5-2',@czxt='',也没有问题,如果执行exec dd @fabu=2,@rjbb='5-2y5',@czxt='',提示'y5' 附近有语法错误。如果执行exec dd @fabu=2,@rjbb='5-y5',@czxt=''或者exec dd @fabu=2,@rjbb='y5',@czxt='',提示列名 'y5' 无效。
,为什么呢????????小弟快疯掉了!!
create procedure dd
(
@fabu varchar(20),
@rjbb varchar(20),
@czxt varchar(20)
)
as
declare @sql varchar(8000)
set @sql = 'select title,rjbb,case fabu
when ''1'' then ''aa''
when ''2'' then ''bb''
when ''3'' then ''cc''
when ''4'' then ''dd''
end as fabu from zsgx where 1= 1 and fabu=' +@fabu if(len(ltrim(rtrim(@rjbb))) >0)
set @sql = @sql + ' and rjbb ='+ @rjbbif(len(ltrim(rtrim(@czxt))) >0)
set @sql = @sql + ' and czxt ='+ @czxt exec(@sql)
如果执行exec dd @fabu=2,@rjbb='',@czxt='',没有问题,如果执行exec dd @fabu=2,@rjbb='5-2',@czxt='',也没有问题,如果执行exec dd @fabu=2,@rjbb='5-2y5',@czxt='',提示'y5' 附近有语法错误。如果执行exec dd @fabu=2,@rjbb='5-y5',@czxt=''或者exec dd @fabu=2,@rjbb='y5',@czxt='',提示列名 'y5' 无效。
,为什么呢????????小弟快疯掉了!!
解决方案 »
- 求助
- 谁有sql server的内置函数大全?
- 求一嵌套查询
- 急! 请高手指点! 怎样配置sqlserver集群?
- 备份问题
- 开启另外一台机器上安装的sql server的代理服务,怎么问题提示:发生错误5-(拒绝访问),此时正在sql server;agent服务上执行该服务器操作
- 如何对存储过程返回的表用 in 逻辑操作符?
- 存储过程中如何根据输入参数查询相应字段字段?
- 急!急!新手请教:因为机器要重装,我准备把sqlSERVER中的A库对应的A_Data.Mdf拷到服务器,可我却不知重装后该如何把A库再倒到sqlSERVER中,请指教!
- 【沐沐很乖】关于后缀名为WDB的数据文件,怎么转换成其他常见数据格式
- 编号生成问题?
- 再提问一个存储过程的问题!!
(
@fabu varchar(20),
@rjbb varchar(20),
@czxt varchar(20)
)
as
declare @sql varchar(8000)
set @sql = 'select title,rjbb,case fabu
when ''1'' then ''aa''
when ''2'' then ''bb''
when ''3'' then ''cc''
when ''4'' then ''dd''
end as fabu from zsgx where 1= 1 and fabu=''' +@fabu + ''''if(len(ltrim(rtrim(@rjbb))) >0)
set @sql = @sql + ' and rjbb ='''+ @rjbb + ''''if(len(ltrim(rtrim(@czxt))) >0)
set @sql = @sql + ' and czxt ='''+ @czxt + ''''exec(@sql)
(
@fabu varchar(20),
@rjbb varchar(20),
@czxt varchar(20)
)
as
declare @sql varchar(8000)
set @sql = 'select title,rjbb,case fabu
when ''1'' then ''aa''
when ''2'' then ''bb''
when ''3'' then ''cc''
when ''4'' then ''dd''
end as fabu from zsgx where 1= 1 and fabu=' +@fabu
if(len(ltrim(rtrim(@rjbb))) >0)
set @sql = @sql + ' and rjbb ='''+ @rjbb + ''''if(len(ltrim(rtrim(@czxt))) >0)
set @sql = @sql + ' and czxt ='''+ @czxt + ''''exec(@sql)
set @sql = @sql + ' and rjbb ='+ @rjbbif(len(ltrim(rtrim(@czxt))) >0)
set @sql = @sql + ' and czxt ='+ @czxt --------------------------------------------
改成:
from zsgx where 1= 1 and fabu=''' +@fabu + ''''if(len(ltrim(rtrim(@rjbb))) >0)
set @sql = @sql + ' and rjbb ='''+ @rjbb + ''''if(len(ltrim(rtrim(@czxt))) >0)
set @sql = @sql + ' and czxt ='''+ @czxt + ''''
你先不要疯,你自己的 问题比如:select * from tablename where col = sjfklsjdlfjslkfsjdfljsljfsdlfj
你认为这样的SQL语句能执行吗?
、、、、
as
exec(' Select ' + @Cond);
print(' Select ' + @Cond);
declare @sql varchar(8000)
set @sql = 'select title,rjbb,
、、、
其中的
exec(' Select ' + @Cond);
print(' Select ' + @Cond);该如何专置呢?
print(' Select ' + @Cond);也放在@sql中??