我有一个字符串.如:
declare @sqlstring nvarchar(200)
set @sqlstring='2;1,2,7'我要输出这样的字符串.set @sqlout='select 2,1 union all select 2,2 union all select 2,7 '也就是我要根据已知道的字符串,拼出一个sql. 不用循环不知道是否可以实现这个需求..
就是把后面的和前面组织起来.注意: 前面最多就一个字符.不会有多余的.后面的数字不固定....
declare @sqlstring nvarchar(200)
set @sqlstring='2;1,2,7'我要输出这样的字符串.set @sqlout='select 2,1 union all select 2,2 union all select 2,7 '也就是我要根据已知道的字符串,拼出一个sql. 不用循环不知道是否可以实现这个需求..
就是把后面的和前面组织起来.注意: 前面最多就一个字符.不会有多余的.后面的数字不固定....
go
create function dbo.fn_split
(
@inputstr varchar(8000),
@seprator varchar(10)
)
returns @temp table (a varchar(200))
as begin
declare @i int set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator, @inputstr) while @i >= 1
begin
insert @temp values(left(@inputstr, @i - 1)) set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
set @i = charindex(@seprator, @inputstr)
end if @inputstr <> '\'
insert @temp values(@inputstr) return
end
go --调用
declare @s varchar(1000)
declare @str varchar(1000)
set @s='2;1,2,7'
select @str=right(@s,len(@s)-charindex(';',@s))
select left(@s,charindex(';',@s)-1)col,* from dbo.fn_split(@str,',')
/*col a
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2 1
2 2
2 7(影響 3 個資料列)*/
set @sqlstring='2;1,2,7' declare @firstfield varchar(2)
set @firstfield=left(@sqlstring,1)set @sqlstring=substring(@sqlstring, charindex(';',@sqlstring)+1, len(@sqlstring))set @sqlstring='select '+@firstfield+','+replace(@sqlstring,',',' union all select '+@firstfield+',')print @sqlstring
/*
select 2,1 union all select 2,2 union all select 2,7
*/
若固定為兩列數據,以逗號(,)分隔應該是:
2,1
2,NULL
7,NULL怎麽弄出來
2,1
2,2
2,7
這個數據的?
declare @sqlstring nvarchar(200)
declare @sqlout nvarchar(200)
set @sqlstring='2;1,2,7'
set @sqlout=@sqlstring
declare @str varchar(1000)
set @str=left(@sqlout,charindex(';',@sqlout)-1)
print @str
print @sqlout
set @sqlout=stuff(@sqlout,1,len(@str),'')
print @sqlout
set @sqlout= replace(@sqlout,',',' union all select '+@str+',')
print @sqlout
set @sqlout= replace(@sqlout,';','select '+@str+',')
print @sqlout
declare @str varchar(10)
这样能好些