declare @chvTempString varchar(20),@intCharIndex int
while len(@chvTest)<>0
begin
select @chvTest = ltrim(rtrim(@chvTest))
--print @chvTest
select @intCharIndex = charindex(';',@chvTest,1)
if @intCharIndex<>0
select @chvTempString = left(@chvTest,@intCharIndex-1)
else
select @chvTempString = @chvTest
if not exists(select 1 from #test where chvString=@chvTempString) and len(@chvTempString)<>0
insert into #test values(@chvTempString)
if len(@chvTempString) <> len(@chvTest)
select @chvTest =right(@chvTest,len(@chvTest)-len(@chvTempString)-1)
else
select @chvTest=''
end
declare @ReturnString varchar(800)
select @ReturnString=''
declare @subString varchar(20)
declare cur_string cursor for
select ltrim(rtrim(chvString)) from #test
open cur_string
fetch next from cur_string into @subString
while @@fetch_status=0
begin
select @ReturnString=@ReturnString+@subString + ';'
fetch next from cur_string into @subString
end
close cur_string
deallocate cur_string
select @ReturnString=left(@ReturnString,len(@ReturnString)-1)
print @ReturnString
drop table #test
declare @chvTempString varchar(20),@intCharIndex int
while len(@chvTest)<>0
begin
select @chvTest = ltrim(rtrim(@chvTest))
select @intCharIndex = charindex(';',@chvTest,1)
if @intCharIndex<>0
select @chvTempString = left(@chvTest,@intCharIndex-1)
else
select @chvTempString = @chvTest
if not exists(select 1 from #test where chvString=@chvTempString)
insert into #test values(@chvTempString)
if len(@chvTempString) <> len(@chvTest)
select @chvTest =right(@chvTest,len(@chvTest)-len(@chvTempString)-1)
else
select @chvTest=''
end
declare @ReturnString varchar(800)
select @ReturnString=''
declare @subString varchar(20)
declare cur_string cursor for
select chvString from #test
open cur_string
fetch next from cur_string into @subString
while @@fetch_status=0
begin
select @ReturnString=@ReturnString+@subString + ';'
fetch next from cur_string into @subString
end
close cur_string
deallocate cur_string
select @ReturnString=left(@ReturnString,len(@ReturnString)-1)
print @ReturnString
drop table #test
declare @ varchar(8000)
set @=''
select @=@+rtrim(name)+' from t1 union all select ' from syscolumns where id=object_id('t1')
set @=left(@,len(@)-len(' from t1 union all select '))
--print @
exec('select '+@+' from t1')
行转列
Delete from ...
列转行
declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql + ',sum(case km when '''+km+''' then cj end) ['+km+']'
from (select distinct km from test) as a
select @sql = @sql+' from test group by name'
exec(@sql)
create table a1(name varchar(10))
insert a1
select 'test;ssf;test;ddd;df;test'
union select 'dd'
union select 'ss'
union select 'test'
union select 'tessss'
(所影响的行数为 5 行)
dd
ss
tessss
test
test;ssf;test;ddd;df;test
create proc testtt
@name varchar(100)
as
if object_id('tempdb..#testtt') is not null
drop table #testtt
create table #testtt(name varchar(20))
declare @t varchar(20),@t2 varchar(100),@t3 varchar(100)
select @t3=@name
while charindex(';',@name)>0
begin
select @t=substring( @name,1,charindex(';',@name)-1)
if not exists(select 1 from #testtt where name=@t)
insert #testtt select @t
select @name=substring( @name,charindex(';',@name)+1,len(@name)-charindex(';',@name))
end
select @t2=''
select @t2=@t2+name+';' from #testtt
select @t2=substring(@t2,1,len(@t2)-1)
update a1 set name=@t2 where name=@t3