declare @i int,@name varchar(1024)
declare tb cursor for select name from CustInfo
open tb
set @i=1
fetch next from tb into @name
while @@fetch_status=1
begin
if @i=1 set @key1=@name
if @i=2 set @key2=@name
if @i=3 set @key3=@name
if @i=4 set @key4=@name
fetch next from tb into @name
set @i=@i+1
end
close tb
deallocate tb

解决方案 »

  1.   

    declare @key1 varchar(1024)
    declare @key2 varchar(1024)
    declare @key3 varchar(1024)
    declare @key4 varchar(1024)Select @key1 = (select name from CustInfo where id = 1)
    ,@key2 = (select name from CustInfo where id = 2)
    ,@key3 = (select name from CustInfo where id = 3)
    ,@key4 = (select name from CustInfo where id = 4)
      

  2.   

    zjcxc(邹建) 兄:
    我用你你的分离函数,但是我想把得到的放到变量中,如何放,最多4行,但有可能没有4行
    declare @KeyString   varchar(1024)
    declare @Key1   varchar(1024)
    declare @Key2   varchar(1024)
    declare @Key3   varchar(1024)
    declare @Key4   varchar(1024)
    set @KeyString = '1@#2@#3@#4'
    select istr from dbo.fsplit(@KeyString,'@#')
      

  3.   

    declare @key1 varchar(1024)
    declare @key2 varchar(1024)
    declare @key3 varchar(1024)
    declare @key4 varchar(1024)Select @key1=name from CustInfo where id = 1
    Select @key2=name from CustInfo where id = 2
    Select @key3=name from CustInfo where id = 3
    Select @key4=name from CustInfo where id = 4
      

  4.   

    declare @key1 varchar(1024)
    declare @key2 varchar(1024)
    declare @key3 varchar(1024)
    declare @key4 varchar(1024)
    create table #a(no [int] identity(1,1),name varchar(1024))
    insert #a
    select name from CustInfo
    set @key1=select name from #a where no=1
    set @key2=select name from #a where no=2
    set @key3=select name form #a where no=3
    set @key4=select name from #a where no=4
      

  5.   

    --因为不知道你是用我写的那个,所以连函数一齐提供--创建分离函数
    create function fsplit(
    @str varchar(8000), --要分离的字符
    @splichar varchar(10) --分隔符
    ) returns @re table(id int identity(1,1),istr varchar(100))
    as
    begin
    --为分离表中的数据而设置临时表
    declare @tb table(id int identity(1,1),a int)
    insert into @tb(a)
    select top 8000 1 from
    (select top 100 id from syscolumns) a
    ,(select top 100 id from syscolumns) b

    declare @lensplichar int
    set @lensplichar=len(@splichar)
    insert into @re(istr)
    select substring(name,b.id,charindex(@splichar,name+@splichar,b.id)-b.id)
    from (select name=@str) a,@tb b
    where substring(@splichar+name,b.id,@lensplichar)=@splichar
    return
    end
    go--处理你的数据
    declare @KeyString   varchar(1024)
    declare @Key1   varchar(1024)
    declare @Key2   varchar(1024)
    declare @Key3   varchar(1024)
    declare @Key4   varchar(1024)
    set @KeyString = '1@#2@#3@#4'select * into #t from dbo.fsplit(@KeyString,'@#')
    select @key1=istr from #t where id=1
    select @key2=istr from #t where id=2
    select @key3=istr from #t where id=3
    select @key4=istr from #t where id=4drop table #t
    go
    drop function fsplit
      

  6.   

    --其实,如果你要这样处理的话,最好不用函数,直接用存储过程更好.:--创建数据处理的存储过程
    create proc p_split
    @str varchar(8000), --要分离的字符
    @splichar varchar(10), --分隔符
    @Key1 varchar(1024) out,  --返回参数
    @Key2 varchar(1024) out, --返回参数
    @Key3 varchar(1024) out, --返回参数
    @Key4 varchar(1024) out --返回参数
    as
    --为分离表中的数据而设置临时表
    select top 8000 id=identity(int,1,1) into #tb from
    (select top 100 id from syscolumns) a
    ,(select top 100 id from syscolumns) bdeclare @lensplichar int
    set @lensplichar=len(@splichar)
    select id=identity(int,1,1)
    ,a=substring(name,b.id,charindex(@splichar,name+@splichar,b.id)-b.id)
    into #t from (select name=@str) a,#tb b
    where substring(@splichar+name,b.id,@lensplichar)=@splicharselect @key1=a from #t where id=1
    select @key2=a from #t where id=2
    select @key3=a from #t where id=3
    select @key4=a from #t where id=4
    go--处理你的数据
    declare @KeyString   varchar(1024)
    declare @Key1   varchar(1024)
    declare @Key2   varchar(1024)
    declare @Key3   varchar(1024)
    declare @Key4   varchar(1024)
    set @KeyString = '1@#2@#3@#4'exec p_split @KeyString,'@#',@Key1 out,@Key2 out,@Key3 out,@Key4 out
    select @Key1,@Key2,@Key3,@Key4
    go
    drop proc p_split
      

  7.   

    非常感谢 zjcxc(邹建) 兄,但是下面这个还可以用吗?CREATE Function fsplit(
    @str varchar(8000), --要分拆的字符串
    @spli varchar(10) --字符串分隔符
    )
    returns @re table(istr varchar(8000))
    as
    begin
    declare @i int,@splen int
    select @splen=len(@spli)
    ,@i=charindex(@spli,@str)
    while @i>0
    begin
    insert into @re values(left(@str,@i-1))
    select @str=substring(@str,@i+@splen,8000)
    ,@i=charindex(@spli,@str)
    end
    if @str<>'' insert into @re values(@str)
    return
    end