C'est possible, mais plutôt compliqué. Vous pouvez récupérer la liste des colonnes d'une table à partir de INFORMATION_SCHEMA.COLUMNS
. Pour chaque colonne, vous pouvez exécuter une requête pour voir si une ligne non nulle existe. Enfin, vous pouvez exécuter une requête basée sur la liste de colonnes qui en résulte.
est ici une façon de le faire, avec un curseur:
declare @table_name varchar(256)
set @table_name = 'Airports'
declare @rc int
declare @query nvarchar(max)
declare @column_list varchar(256)
declare columns cursor local for select column_name
from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @table_name
open columns
declare @column_name varchar(256)
fetch next from columns into @column_name
while @@FETCH_STATUS = 0
begin
set @query = 'select @rc = count(*) from ' + @table_name + ' where ' +
@column_name + ' is not null'
exec sp_executesql @query = @query, @params = N'@rc int output',
@rc = @rc output
if @rc > 0
set @column_list = case when @column_list is null then '' else
@column_list + ', ' end + @column_name
fetch next from columns into @column_name
end
close columns
deallocate columns
set @query = 'select ' + @column_list + ' from ' + @table_name
exec sp_executesql @query = @query
Cela fonctionne sur SQL Server. Cela pourrait être assez proche pour Sybase. Heureusement, cela montre que taper une liste de colonnes n'est pas si mal :-)
Vous avez des exemples de données et une sortie attendue? –
Trop paresseux pour taper les noms des colonnes ?! Sérieusement ... Pensez-y à nouveau. – Tomalak
semble assez poisson pour moi de penser que c'est peut-être un problème de normalisation. les colonnes doivent être des lignes d'une autre table. – Randy