8
votes

Préfixer toutes les colonnes de la déclaration T-SQL

Compte tenu d'une table "ABC" avec des colonnes Col1, Col2 et Col3, il est possible de générer automatiquement quelque chose comme ce qui suit: xxx

J'ai une table sans ensemble de colonnes (utilisateurs sont capables d'ajouter leurs propres colonnes) où j'ai toujours besoin du préfixe de la colonne (car il est nécessaire dans une jointure / CTE avec d'autres tables qui ont également des colonnes avec les noms COL1, COL2, etc.)

Par conséquent, j'aimerais pouvoir écrire quelque chose comme ceci: xxx

ce qui n'est bien sûr pas valide SQL, mais peut-il être fait d'une manière ou d'une autre afin que les colonnes "*" obtiennent tous le même préfixe?


0 commentaires

3 Réponses :


2
votes

Vous semblez confus sur les alias de colonne faire. Comme vous pouvez le voir dans votre clause SELECT , vous sélectionnez déjà uniquement les champs de T0 en référençant t0. * . Vous pouvez toujours faire référence à ces champs comme t0. plus loin dans votre requête sans alias les champs, vous devez simplement vous y référer par leur nom complet, c'est-à-dire t0. [ Mes utilisateurs aspirent et font des noms de champs vraiment longs] .

Edit: Pour être plus clair, vous ne pouvez pas modifier le préfixe d'un champ en l'aliasant. Vous ne pouvez modifier le nom de celui-ci que. Le préfixe du champ est l'alias de la table qui vient de.


3 commentaires

Downvoter soin de commenter? Rien que j'ai dit ici n'est incorrect.


@Donnie: probablement la bownvot tactique de quelqu'un


Je sais t0. * Peut être référencé quant à. mais comme je le mentionne que cet exemple est ultérieurement utilisé dans une jointure plus avancée et une expression de table commune (CTE). Et à ce moment-là, il y aura une t0, T1, T2, etc. où certains des champs ont les mêmes noms de colonnes. Dans Joinines * Travaillera toujours mais dans CTE's Il n'est pas possible d'avoir les mêmes noms de colonne deux fois .. .



0
votes

Je pense que la seule façon d'être capable de le faire est de créer une SQL dynamique.


0 commentaires

3
votes

Cela vous donnera une carte des anciens noms de colonnes et de nouveaux noms de colonnes: xxx pré>

à partir de là, il ne s'agit que d'une SQL dynamique. Je joue toujours avec ça. P>

Modifier strud> p>

OK, j'ai abandonné ça. P>

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)


1 commentaires

Merci pour l'effort .. J'espérais qu'il y avait un autre moyen que dynamique SQL (et puisqu'il ne semble pas être je ne vais pas aller sur cette route) ...