工具:sql2000,
串:'1,部门经理,经理查阅,2,3,24,0|2,助理,助理处理,2,3,24,0|'
这是一个完整的串,|是用来分隔行的,这里是两行记录,第一个数字表示行号,现在整体作为参数传入数据库,通过一个函数,以表变量的形式返回,请问用函数咋个处理?结果形式:
select 1,'部门经理','经理查阅',2,3,24,0
union all
select 2,'助理','助理处理',2,3,24,0

解决方案 »

  1.   

    declare @s nvarchar(300),@sql nvarchar(600)
    set @s=N'1,部门经理,经理查阅,2,3,24,0|2,助理,助理处理,2,3,24,0' 
    set @sql= replace('select '''+replace(@s,'|',''' union all select '''),',',''',''')+''''
    exec(@sql)
      

  2.   

    declare @s nvarchar(300),@sql nvarchar(600)
    set @s=N'1,部门经理,经理查阅,2,3,24,0|2,助理,助理处理,2,3,24,0' 
    set @sql= replace('select '''+replace(@s,'|',''' union all select '''),',',''',''')+''''
    print @sql
    /*
    select '1','部门经理','经理查阅','2','3','24','0' 
    union all 
    select '2','助理','助理处理','2','3','24','0'
    */
      

  3.   

     谢谢,,对不起,是我没描述清楚。我自己整了一段,但是报错:服务器: 消息 197,级别 15,状态 1,行 11
    无法在向表插入变量时将 EXECUTE 用作源。如下:declare @str varchar(1000),@get_str varchar(1000)
    declare @tb table (id int,step_name varchar(200),do_name varchar(200),company_id int,deptcode int,step_time int,flag int)
    set @str='1,''部门经理2'',''经理处理'',116,749,10,1|2,''部门经理2'',''经理处理'',119,764,10,1|'
    set @get_str=''while charindex('|',@str)>0
    begin
    set @get_str=left(@str,charindex('|',@str)-1)
    insert into @tb(id,step_name,do_name,company_id,deptcode,step_time,flag) 
    exec('select '+ @get_str)
    set @str=right(@str,len(@str)-charindex('|',@str))
    end
      

  4.   

    ALTER   FUNCTION [dbo].[Split]   
    (   
    @c VARCHAR(MAX) ,   
    @split VARCHAR(50)   
    )   
    RETURNS @t TABLE ( col VARCHAR(50) )   
    AS  
    BEGIN  
        WHILE ( CHARINDEX(@split, @c) <> 0 )   
            BEGIN  
                INSERT  @t( col )   
                VALUES  ( SUBSTRING(@c, 1, CHARINDEX(@split, @c) - 1) )   
                SET @c = STUFF(@c, 1, CHARINDEX(@split, @c), '')   
            END  
        INSERT  @t( col ) VALUES  ( @c )   
        RETURN  
    END写成数据库函数
    select * from Split(要转换的变量 , '分割符')调用方式select * from Split(@id , ',')