mssql sqlserver 使用逗号分隔字符串,使其转换为一张表,供子查询in使用


摘要:
下文将分享我们通过逗号分隔字符串的方法


例:

declare @a varchar(100)
set @a ='2,10,30'   ---从页面批量传入文件ID

---以上sql语句,如果keyId 非数字型,
---如果我们想获取 keyId =2 或 keyId =10 或 keyId=30的数据行时,此时使用以上sql脚本将无法得到我们想要的数据,
---我们必须使用拼接字符串的方式处理以上的问题,如下所示:

declare @sql varchar(200)
set @sql ='update tableName set info ='''' 
where keyId in ('+@a+')' 

print (@sql)
exec  (@sql)
-----按照以上的方法操作,我们也可以获取到相关数据,但是或存在注入式漏洞,所以我们遇到此类的问题,通常需要将数据分隔到数据表中,然后再使用子查询处理此类疑问。

——————————
通过我们采用需编写一个sql函数来处理此类问题,如下所示:


 /*利用逗号分隔,指定字符,并返回一张数据表*/
create Function stringChangeTable(@tmp varchar(max)) 
Returns @tab Table 
( 
info varchar(50) 
) 
As 
Begin 
set @tmp = @tmp+',' 
Declare @Istr varchar(50)    --截取后的第一个字符串 
Declare @strTmp varchar(max)  --截取第一个字符串后剩余的字符串 
set @Istr = left(@tmp,charindex(',',@tmp)-1) 
set @strTmp = stuff(@tmp,1,charindex(',',@tmp),'') 
Insert @tab Values(@Istr) 
while(len(@strTmp)>0) 
begin 
set @Istr = left(@strTmp,charindex(',',@strTmp)-1) 
Insert @tab Values(@Istr) 
set @strTmp = stuff(@strTmp,1,charindex(',',@strTmp),'') 
end 
Return 
End

go

---------函数应用------------
declare @tmp varchar(200)
set @tmp ='58,25,15,88,99'

select * from stringChangeTable(@tmp)


go
drop function  stringChangeTable
mssql_sqlserver_逗号分隔符转换为数据表方法分享

mssql_sqlserver_逗号分隔符转换为数据表方法分享