以往在sql server中进行一些类似于in操作的查询时,经常需要使用动态sql来拼合sql字符串实现,而使用动态sql时又往往会留有sql注入的隐患。
这里提供一个表值函数来把in中的参数重新分割为一个临时表,从而可以在sql中通过类似的join操作来进行相关的查询。
Create function [dbo].[F_Split](@c varchar(4000) , @split varchar(2))
returns @t table(col varchar(256))
as
begin
while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
end
insert @t(col) values (@c)
return
end
操作样例:
declare @instr varchar(100)
set @instr = '1,2,3,4,5'
select * from [dbo].[F_Split](@instr,',')