Это возможно сделать, но отчасти сложно. Вы можете получить список столбцов в таблице из INFORMATION_SCHEMA.COLUMNS
. Для каждого столбца вы можете выполнить запрос, чтобы увидеть, существует ли какая-либо ненулевая строка. Наконец, вы можете выполнить запрос на основе полученного списка столбцов.
Вот один из способов сделать это с помощью курсора:
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
Это работает на SQL Server. Это может быть достаточно близко для Sybase. Надеюсь, это демонстрирует, что распечатка списка столбцов не так уж и плоха: -)