日期:2014-05-18  浏览次数:20602 次

请教SQLSERVER在存储过程中单引号的相关问题
在写SQL分页的存储过程时,我需要这样去调用我的存储过程,参数含义就不用在解释了,就是一般的分页存储过程传参
其中,AND ", "+S_Types+"," LIKE "%, 1,%" 是我传进去的一个WHERE条件
SQL code

EXECUTE 分页过程名字 10,'查询的字段',1,'AND ", "+S_Types+"," LIKE "%, 1,%" ' ,1,15,0,30.0,'表1 LEFT JOIN 表2','表1.[id] = 表2.UserID','',''



在存储过程中,对传进来的WHERE条件语句进行了如下操作:
SQL code
Replace(@WhereStr,'"','''')


这是我想得到的执行语句
SQL code

SELECT  TOP 10 查询的字段 FROM 表1 LEFT JOIN 表2 ON 表1.[id] = 表2.UserID WHERE 其他WHERE条件 AND ', '+S_Types+',' LIKE '%, 1,%'  ORDER BY 排序条件



通过在存储过程中使用PRINT打印,也得到了我想要的SQL语句

不过,在存储过程中 通过EXEC执行的时候却出现了错误 EXEC @SQLStr

服务器: 消息 207,级别 16,状态 3,行 1
列名 'S_Types' 无效。

请教一下,在存储过程中如何才能有效的使用 单引号 这个东西呢。

------解决方案--------------------
SQL code

--参考一下 下面这句
declare @sql varchar(max)
declare @S_Types varchar(120)
set @S_Types='col_name'
set @sql='select top 10 * from a left join b on a.id=b.userid where ..... and  '+@S_Types+'  like ''%,1,%'' order by [排序条件]  '
print @sql
/*
select top 10 * from a left join b on a.id=b.userid where ..... and  col_name  like '%,1,%' order by [排序条件]  
*/

------解决方案--------------------
EXECUTE 分页过程名字 10,'查询的字段',1,'AND ", "+表1.S_Types+"," LIKE "%, 1,%" ',......
------解决方案--------------------
EXECUTE 分页过程名字 10,'查询的字段',1,'AND ", "+S_Types+"," LIKE "%, 1,%" ' ,

这里 S_Types 是你传入的参数还是查询条件里的字段名。。。
------解决方案--------------------
确认表1有S_Types字段吗?

确认那个print出来的SQL能执行通过吗.
------解决方案--------------------
S_Types --> 表2.S_Types