求达人修改一个SQL Server中对字段分列操作语句~···

来源:百度知道 编辑:UC知道 时间:2024/06/14 05:50:32
以下是一个完整的可以使用的程序,就是将Content字段按|分成各列,当这列中都是数字的时候这个程序是可以用的,如果某条数据变成含有汉字 的如:'中国|上海市|徐汇区'就会出现,将 nvarchar 值 '中国' 转换为数据类型为 int 的列时发生语法错误。

如何修改才能对汉字也适用呢?

对数字适用的程序如下(可直接全部复制运行):

--模拟数据表
create table #testtable(ID int,Content varchar(4000))
insert into #testtable(ID,Content)
select 1,'22|5000|3000'
union all select 2,'1|35|200|2'
union all select 3,'802|22'
union all select 4,'213|354|2002|22|500'

--实际操作SQL
declare @sql nvarchar(4000),@i int
set @i=1
while exists(select 1 from #testtable where Content<>' ')
begin
set @sql='alter table #testtable add Data'+convert(varchar,@i)+' int'
exec(@sql)
set @sql='declare @loc int update #testtable set @loc=charindex(''|'',Content),Data'
+convert(varchar,@i)+'=convert(int,case @loc when 0 then Content else '
+'substr

这样就可以了。。
declare @sql nvarchar(4000),@i int
set @i=1
while exists(select 1 from #testtable where Content<>' ')
begin
set @sql='alter table #testtable add Data'+convert(varchar,@i)+' varchar(50)'
exec(@sql)
set @sql='declare @loc int update #testtable set @loc=charindex(''|'',Content),Data'
+convert(varchar,@i)+'=convert(varchar(50),case @loc when 0 then Content else '
+'substring(Content,1,@loc-1) end),Content=case @loc when 0 then '' '' else '
+'substring(Content,@loc+1,len(Content)-@loc) end where Content<>'' '' '
exec(@sql)
set @i=@i+1
end
select * from #testtable