Prefix all columns in T-SQL statement

后端 未结 3 1553

Given a table \"ABC\" with columns Col1, Col2 and Col3 it is possible to automatically generate something like the following:

SELECT
Col1 AS \'ABC_Col1\', 
C         


        
相关标签:
3条回答
  • 2021-01-12 03:56

    This will give you a map of old column names and new column names:

    SELECT syscolumns.name as old_column_name, 'ABC_' + syscolumns.name as new_column_name
       FROM sysobjects 
            JOIN syscolumns ON sysobjects.id = syscolumns.id
       WHERE sysobjects.name = 'ABC'
    ORDER BY sysobjects.name,syscolumns.colid
    

    From there it's just some dynamic sql. I'm still playing with it.

    EDIT

    OK, I ditched that.

    DECLARE @sql varchar(max)
    SET @sql = 'SELECT '
    
    DECLARE @old_column_name varchar(50)
    DECLARE @getNext CURSOR
    SET @getNext = CURSOR FOR 
        SELECT syscolumns.name
           FROM sysobjects 
                JOIN syscolumns ON sysobjects.id = syscolumns.id
           WHERE sysobjects.name = 'ABC'
    OPEN @getNext
    FETCH NEXT FROM @getNext INTO @old_column_name
    WHILE @@fetch_status = 0
    BEGIN
    
        --BUILD DYNAMIC SQL
        SET @sql = @sql + @old_column_name + ' AS ''ABC_' + @old_column_name + ''', '
    
    FETCH NEXT FROM @getNext INTO @old_column_name
    END
    CLOSE @getNext
    DEALLOCATE @getNext
    
    --REMOVE FINAL COMMA AND ADD TABLE
    SET @sql = SUBSTRING(@sql, 0, LEN(@sql)) + ' FROM ABC'
    
    exec(@sql)
    

    A) this is terrible performance (because it's a cursor)

    B) I know you're not meant to do work for people on here, but I got carried away.

    C) I considered not even posting this because of how poor of an answer I feel it is, but it's a least an idea.

    0 讨论(0)
  • 2021-01-12 04:05

    You seem confused as to what column aliases do. As you can see in your select clause, you're already only selecting fields from T0 by referencing T0.*. You can still reference those fields as T0.<whatever> later in your query without aliasing the fields, you will just have to refer to them by their full field name, ie, T0.[My Users Suck And Make Really Long Field Names].

    EDIT: To be more clear, you can not change the prefix of a field by aliasing it. You can only change the name of it. The prefix of the field is the alias of the table that it comes from.

    0 讨论(0)
  • 2021-01-12 04:05

    I think the only way you'll be able to do this is by creating some dynamic SQL.

    0 讨论(0)
提交回复
热议问题