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: 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.) P> Par conséquent, j'aimerais pouvoir écrire quelque chose comme ceci: p> 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? p> p>
3 Réponses :
Vous semblez confus sur les alias de colonne faire. Comme vous pouvez le voir dans votre clause 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. P> SELECT CODE>, vous sélectionnez déjà uniquement les champs de T0 code> en référençant t0. * Code>. Vous pouvez toujours faire référence à ces champs comme t0. t0. [ Mes utilisateurs aspirent et font des noms de champs vraiment longs] code>. P>
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 à.
Je pense que la seule façon d'être capable de le faire est de créer une SQL dynamique. P>
Cela vous donnera une carte des anciens noms de colonnes et de nouveaux noms de colonnes: à 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)
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) ...