SQL Server: выберите Топ 0? - PullRequest
32 голосов
/ 17 мая 2011

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

Ответы [ 7 ]

47 голосов
/ 17 мая 2011

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

SELECT TOP 0 * INTO new_table FROM old_table

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

Это так же, как;

SELECT * FROM table WHERE 0=1
27 голосов
/ 17 мая 2011

Для именования столбцов в UNION ALL

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

3 голосов
/ 17 мая 2011

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

2 голосов
/ 17 мая 2011

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

1 голос
/ 02 февраля 2017

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

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

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

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

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

0 голосов
/ 01 ноября 2018

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

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

select top 0 0 'Your message here'

вместо

print 'Your message here'

0 голосов
/ 13 февраля 2017

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

SELECT * FROM <table_name> LIMIT 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...