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

如何把数据库中字符串类型的1,2,3,4,5转换成批量删除的1,2,3,4,5

2013-11-02 
怎么把数据库中字符串类型的1,2,3,4,5转换成批量删除的1,2,3,4,5批量删除的存储过程!要接受一个id的集合1,

怎么把数据库中字符串类型的1,2,3,4,5转换成批量删除的1,2,3,4,5
批量删除的存储过程!要接受一个id的集合1,2,3,4
eg:
IF EXISTS(SELECT * FROM SYSOBJECTS WHERE name='D_t_Base_Employee' AND xtype='P') DROP PROC D_t_Base_Employee
   @str id varchar
GO
CREATE PROC D_t_Base_Employee
BEGN
   DELETE Employee WHERE ID IN (@str)
END

在存储过程中应该怎样去吧varchar类型的参数转换成in类型
DELETE Employee WHERE ID IN (1,2,3,4) 转换 varcahr转换int
[解决办法]

方法一
CREATE PROC D_t_Base_Employee @str varchar(100)
as
declare @sql varchar(1000)
set @sql='DELETE Employee WHERE ID IN ('+@str+')'
exec (@sql)

go

方法二
CREATE PROC D_t_Base_Employee @str varchar(100)
as
DELETE Employee WHERE CHARINDEX(','+CAST(id as varchar)+',',','+@str+',')>0
go

[解决办法]
引用:
大神!能不能讲一下原理呀!效果很好!


第一种方法,就是够早了一个动态语句,最后的动态语句类似于这样:

DELETE Employee WHERE ID IN (1,2,3)


第二种方法,
DELETE Employee WHERE CHARINDEX(','+CAST(id as varchar)+',',','+@str+',')>0

最后就变为这样的语句:

DELETE Employee WHERE CHARINDEX(',2,' , ',1,2,')>0

其实就是在字符串串 ',1,2,' 中找有没有字符串',2,'   如果charindex函数,返回的值大于0,说明找到了。

这里为什么要在左右两边,加上逗号呢?

主要是因为 CHARINDEX('2' , '12,2')>0 ,由于不加逗号,会导致在12,2 中能匹配两次字符串2,

那么就有问题了,通过加上左右的逗号,CHARINDEX(',2,' , ',12,2,')>0  这样就能惊醒精确匹配,只匹配 ',12,2,'中的2,而不是12和2,都匹配了

热点排行