Create Procedure p(@tables varchar(500))
as
begin
    declare @s varchar(8000)
    set @s='select * from '
    while charindex(',',@tables)>0
    begin
        set @s=@s+left(@tables,charindex(',',@tables)-1)+' union select * from '
        set @tables=stuff(@tables,1,charindex(',',@tables),'')
    end
    set @s=@s+@tables
    
    exec(@s)
end
go

解决方案 »

  1.   

    Create Procedure Test_p
    (
       @tables varchar(500)
    )
    as
    begin
    declare @result varchar(8000)
    select @result= 'select * from '+replace(@tables,',',' union all select * from ')+'' 
    exec(@result)
    end
      

  2.   

    Create Procedure p
    (
       @tables varchar(500)
    )
    as
    declare @s varchar(8000)
    set @s='select * from '+replace(@tables,',',' union select * from ')
    exec(@s)
    go
      

  3.   

    Create Procedure p
    (
       @tables varchar(500)  --a1,a2,a3
    )
    as
    declare @sql varchar(1000),@name varchar(10)
    set @tables=@tables+','
    set @sql=''
    set @name=''
    while charindex(',',@tables)<>0
    begin
      set @name=substring(@tables,1,charindex(',',@tables)-1)
      set @sql=@sql+'select * from '+@name +' unoin' 
      set @tables=stuff(@tables,1,charindex(',',@Tables),'')
    endset @sql=left(@sql,len(@sql)-5)exec(@sql)go
      

  4.   

    还是用 replace() 好啊 :)学习