DECLARE @STR NVARCHAR(MAX)
SET @STR=''
SELECT @STR=@STR+'
+'',''+CAST('+name+' AS VARCHAR)'
FROM SYS.SYSCOLUMNS
WHERE id=OBJECT_ID('TB')
--AND name NOT IN('','')--可以把不要的去掉
SET @STR='DECLARE @STR VARCHAR(8000);SELECT @STR=ISNULL(@STR+'','','''')+'+STUFF(@STR,1,1,'')+' FROM TB;SELECT @STR'
PRINT @STR--你可以打印出来自己执行,或以下动态执行
EXEC(@STR)

解决方案 »

  1.   


    if OBJECT_ID('test_jay')>0 print 1
    else 
    begin
    select 1 id ,'b' name ,'c' std into test_jay
    union all
    select 2 id ,'d' name ,'e' std
    enddeclare @str nvarchar(max) = ''
    select @str = @str +'cast(' + name + ' as varchar(max))+'','''+'+' from sys.columns where [object_id] = object_id('test_jay')
    select @str = LEFT(@str, len(@str)-5)
    print @strexec ('select ' + @str + 'from test_jay' )
      

  2.   

     
     
    declare @columnsstr varchar(1000)
    declare @tablename varchar(100)='sys_deptdef'
    declare @sql varchar(1000)
    select @columnsstr = isnull(@columnsstr+'+','') + 'isnull(cast('+name + ' as varchar),'''+name+'是空值'') '+CHAR(13) from sys.columns where object_id = object_id(@tablename)
    --print @columnsstr set @sql = 'select '+@columnsstr+'+'','' from '+@tablename+' for xml path('''')' 
     print @sql
      exec (@sql)