How to concatenate all columns in a select with SQL Server

后端 未结 5 913
借酒劲吻你
借酒劲吻你 2020-12-03 12:45

I need my select to have a pattern like this:

 SELECT \' \' + tbl.* + \' \' FROM table tbl;

The ideal solution wo

5条回答
  •  攒了一身酷
    2020-12-03 13:20

    I tried a more generic approach

    Create Procedure P_GetConcatColumns(@tablename varchar(200),@Seperator Varchar(20),@StartTag Varchar(20),@EndTag Varchar(20),@WhereString Varchar(400),@OrderString Varchar(400)) as
    
    
    DECLARE @TmpTableName VARCHAR(100),
            @Columns NVARCHAR(4000),
            @SQL NVARCHAR(MAX),
            @GENNAME VARCHAR(100)
    
    Select  @GENNAME='##'+Replace(Cast(NewID() as Varchar(40)),'-','')
    
    IF OBJECT_ID('tempdb.dbo.' + @GENNAME) IS NOT NULL
    BEGIN
        EXEC('DROP TABLE ' +@GENNAME);
    END
    
    
    
    
    Select @SQL='SELECT TOP 1 * INTO '+@GENNAME+' FROM ' + @tablename
    Exec (@SQL)
    
    
    
    SET @TmpTableName = 'tempdb.dbo.' + @GENNAME
    SELECT @Columns = 
        STUFF(
        (
        SELECT '+' + @Seperator + '+CAST(Coalesce(' + c.name + ','''') AS VARCHAR(MAX))' + CHAR(13)
        FROM tempdb.sys.columns c
        WHERE c.[object_id] = object_Id(@TmpTableName)
        FOR XML PATH(''),TYPE
        ).value('.','VARCHAR(MAX)')
        ,1,len(@Seperator)+2,'')
    
    --SET @SQL = N'SELECT ' +''''+ @StartTag +''''+'+'+ @Columns +''''+'+'+ @EndTag + ''' FROM ' + @tablename 
    SET @SQL = N'SELECT ''' +@StartTag+ '''+'+ @Columns +'+'''+ @EndTag + ''' FROM ' + @tablename 
    +' '+Coalesce(@WhereString,'')
    +' '+Coalesce(@OrderString,'')
    Print @SQL
    EXEC sp_executeSQL @SQL
    
    
    --ExampleCall P_GetConcatColumns 'Arten',''',''','','','where id>1','Order by ID desc'
    

提交回复
热议问题