2013-10-09 2 views
1

Мне интересно, есть ли в любом случае, чтобы получить список столбцов из SQL-запроса. Например, у меня есть простой оператор SQL, например «Select FirstName, LastName From Customer», я хочу получить список столбцов, возвращаемых в SQL-заявлении, который будет в этом примере иметь имя FirstName и LastName. Заявление SQL является динамическим, поэтому оно не известно до выполнения.Получение списка столбцов из оператора SQL Select

В настоящее время я иду об этом, создав представление в базе данных на лету, чем при использовании:

SELECT COLUMN_NAME FROM information_schema.columns WHERE table_name = @viewName 

Чем я бросаю взгляд.

Это кажется немного драматичным для получения столбцов для оператора select.

Любые идеи о том, как это сделать, не создавая и не отбрасывая представление?

Заранее спасибо

+0

Почему вы не используете методы манипуляции строками для извлечения имени столбца из запроса? таких как SQLQuery.substring ...? Вам нужны эти имена столбцов внутри сервера sql? – mpakbaz

+0

Привет, mpakbaz. Проблема с комбинациями sql перед началом столбцов довольно огромная. Также определение sql никогда не будет идеальным именем, кроме запятой, оно может быть вычисленным полем с сопоставлением полей AS или неименованным столбцом типа EXPR1. – Matt

+1

Вы не знаете столбцы заранее? Что ты пытаешься сделать? – user172839

ответ

0

Для этого вы должны использовать SET FMTONLY.

SET FMTONLY ON; 
(run your query) 
SET FMTONLY OFF; 

Когда включен только «формат», SQL Server фактически не запускает запрос; он просто возвращает пустой набор результатов в том же формате, что и запрос (т. е. все столбцы, просто строки). Затем вы можете исследовать схему столбцов с помощью любого клиентского API, который вы используете (например, если вы используете .NET, вы можете использовать SqlDataReader .FieldCount, GetFieldType и GetName).

Как указано на странице документации, которая мне понравилась выше, SET FMTONLY устарел в SQL Server 2012; поэтому, если позднее вы обновите приложение до 2012 года, вместо этого они рекомендуют использовать sp_describe_first_result_set.

1

Я часто использую довольно hoaky технику, где это делать выбор с ложным условием как

Select ..... Where 1=0 

Это возвращает достаточно быстро результирующий набор со всеми столбцами, но без каких-либо строк. Поэтому, если вы работаете в визуальной среде, вы можете видеть, какие у вас есть столбцы, и если вы работаете из программы/скрипта, доступны все обычные возможности доступа к столбцам.

Смежные вопросы