SQL Server: выберите Top 0?

#sql #sql-server #sql-server-2005

#sql #sql-сервер #sql-server-2005

Вопрос:

Мы только что наткнулись на это в старой производственной программе (здесь происходит намного больше, но это в одной части ее логики). Зачем кому-то вообще выбирать top 0 строк из таблицы? Это какой-то SQL-хак или трюк, с которым я не знаком?

Комментарии:

1. Чтобы получить имена столбцов / заголовки?

2. Это определенно делает это.

Ответ №1:

Это способ получить пустой набор; например, создать новую пустую таблицу с теми же столбцами, что и в существующей;

 SELECT TOP 0 * INTO new_table FROM old_table
  

Или выступать в качестве источника для имен столбцов
Или как способ вернуть сведения о столбце, но без данных, на клиентский уровень
Или как запрос для проверки подключения

Это то же самое, что;

 SELECT * FROM table WHERE 0=1
  

Ответ №2:

Для присвоения имен столбцам в ОБЪЕДИНЕНИИ ALL

Обязательно прочитайте также ответ Алекса К. У него есть много причин, которые я также использовал. Это был просто самый очевидный.

Комментарии:

1. Я думаю, что это, скорее всего, причина, просто хотел убедиться, что больше ничего не происходит. Спасибо.

2. Я принимаю этот ответ, я почти уверен, что это было причиной для него в нашем случае. Спасибо!

3. Я использовал его в редких случаях, например, при работе с SSAS или в других сумасшедших ситуациях.

Ответ №3:

Делая это, вы получаете пустой результирующий набор со всеми столбцами вместо no result. Если программа, использующая хранимую процедуру, ожидает определенные столбцы, в противном случае она завершится сбоем.

Ответ №4:

Вы могли бы использовать это, чтобы захватить имена столбцов.

Комментарии:

1. «просто проверьте, было совпадение или нет» — Объяснить?

2. Неважно, игнорируйте это. 🙂 Я неправильно подумал. Прошло некоторое время с тех пор, как я использовал SQL Server и запутался. Вы вызвали меня, извините!

3. Нет проблем, я не вызывал вас … думал, вы знаете что-то, чего не знаю я. Вот почему я опубликовал вопрос! 😉

4. Никакого вреда, я не имел в виду это негативно.

Ответ №5:

Используйте это для создания временной таблицы, в которой параметры сортировки вашей базы данных и базы данных TEMPDB могут отличаться.

 SELECT TOP(0) column INTO #temp FROM [mytable]
  

Создает временную таблицу с теми же параметрами сортировки, что и моя таблица. Тогда это означает

 SELECT * FROM #temp T INNER JOIN [mytable] M ON M.column=T.column
  

Сбой не из-за ошибки сортировки.

Ответ №6:

Позвольте мне предоставить дополнительное использование:

Если вы хотите, чтобы сообщение печаталось в выходных данных, а не в сообщениях, вы могли бы использовать

select top 0 0 'Your message here'

вместо

print 'Your message here'

Ответ №7:

Вы можете использовать это, чтобы проверить правильность вашего синтаксиса SQL без загрузки каких-либо данных.

Ответ №8:

В основном я использовал его при создании временных таблиц из существующей таблицы базы данных — без каких-либо данных. Однако следующее является более надежным, чем использование top.

 SELECT * FROM <table_name> LIMIT 0;
  

Комментарии:

1. Это недопустимый TSQL…