#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…