日期:2014-05-17  浏览次数:20509 次

存储过程中输入一个变量,带着单引号,可以replace吗?
下面为原来的存储过程

ALTER PROCEDURE [dbo].[存储过程名]
@id_check nvarchar(max)
AS
BEGIN
   XXOO省略
END 


1、@id_check是输入变量。
2、@id_check的值由一个多选框构成。为记录的ID数。
3、多选后@id_check的值成为'1,2,3,5,10'
4、能不能REPLACE一下,将两边的单引号去掉呢?
因为我要用到 where id in (@id_check)这样的语句。

最好是能写成下面这样
ALTER PROCEDURE [dbo].[存储过程名]
@id_check nvarchar(max)
AS
BEGIN
   DECLARE @idgroup nvarchar(max)    --这里定义一个新的变量
   SET @idgroup=replace(@id_check,XXOO不会写)  --这里去掉单引号后赋值给新变量
   XXOO省略
END 

------解决方案--------------------

ALTER PROCEDURE [dbo].[存储过程名]
 @id_check nvarchar(max)
AS
BEGIN

   update a
   set a.mark = 2
   from 表table a join (
     select substring(@id_check,number,charindex(',',@id_check+',',number)-number) as colforID
     from master..spt_values
     where [type] = 'P' and number <= len(@id_check+',')
       and charindex(@id_check,@id_check+',',number) = number 
     )b on a.id = b.colforID
END 


------解决方案--------------------
动态拼接一下就可以了.类似这种:

declare @id_check nvarchar(max) --你的参数
declare @sql varchar(max)
set @sql='select * from tablename where id in ('+@id_chenk+')'
exec (@sql)