前提
数据库是在2016年以下的版本,以上的版本,现在有最新的函数可以支持者两个了
Split
在c#中Split可以将以指定字符分割的字符串转换为字符串数组,这里主要是用于,主表存储了多个从表的id,存储的时候用的字符串,从而为’1,2,3’,在不借助后端的情况下,sql讲该字符串转换为可识别的id
创建方法
create function split(
@string varchar(255),--待分割字符串
@separator varchar(255)--分割符
)returns @array table(item varchar(255))
as
begin
declare @begin int,@end int,@item varchar(255)
set @begin = 1
set @end=charindex(@separator,@string,@begin)
while(@end<>0)
begin
set @item = substring(@string,@begin,@end-@begin)
insert into @array(item) values(@item)
set @begin = @end+1
set @end=charindex(@separator,@string,@begin)
end
set @item = substring(@string,@begin,len(@string)+1-@begin)
if (len(@item)>0)
insert into @array(item) values(substring(@string,@begin,len(@string)+1-@begin))
return
END
原代码地址
使用方法
SELECT * FROM dbo.WechatUser WHERE ID IN (SELECT * FROM dbo.split('1,3,17',','))
FOR XML PATH(‘’)
它可以将列的输出转为行输出,非常有意思,本次是和上面那个方法连用
SELECT CAST(Name AS varchar) +',' FROM WechatUser WHERE id IN (1,3,17) FOR XML PATH('')
原来查询的结果
用了FOR XML PATH的查询结果
这个方法原来是用来转xml的