首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

存储过程中输入一个变量,带着单引号,可以replace吗?解决方法

2013-04-02 
存储过程中输入一个变量,带着单引号,可以replace吗?下面为原来的存储过程ALTER PROCEDURE [dbo].[存储过程

存储过程中输入一个变量,带着单引号,可以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)

热点排行