Я позволяю конечному пользователю определить, сколько строк возвращается запросом (SELECT TOP (@x)). Есть ли значение, которое можно ввести, когда возвращаются все строки? Или я должен динамически создавать запрос без TOP (@x), если они хотят, чтобы все строки возвращались?
Я использую SQL Server 2012.
sql-server
Уэйн Э. Пфеффер
источник
источник
TOP ... ORDER BY
то? Что-ORDER BY
то еще требуется в случае, если вы выбираете все?TOP
может быть и речи? Как будто вы имеете дело с каким-то предопределенным запросом, и вам нужно что- то передать ?Ответы:
Ну, это выглядит как TOP является BIGINT , если вы не используете ПРОЦЕНТЫ . Это означает, что вы можете передать максимальное значение BIGINT ,
Я серьезно сомневаюсь, что вы когда-нибудь увидите такой большой стол. Я не уверен, какое влияние это окажет на план запроса.
источник
@x
является BIGINT, онаSET @x = 0x7fffffffffffffff
может быть более понятной для некоторых. В любом случае легче запомнить.7
а затем все остальное,F
и вам нужно всего 16 символов для 8 байтов. И да, он будет неявно преобразован при назначении переменной этого типа данных.0x7fffffffffffffff
представление максимального значенияbigint
в SqlServer. Причина заключается в том, что в SqlServer двоичной постоянной записи у вас есть7f
в низком байте, где , как и в языках программирования, как C ++ у вас есть это в высших байтах , чтобы получить максимум знакового интегрального типа.Вы также можете рассмотреть
Вместо того
Значение, которое вам нужно установить для @x, это
0
отключить его.Это не рекомендуется для операторов модификации данных, но не рекомендуется для
SELECT
.В 2012 году составляется другой план для случая, когда
ROWCOUNT
равен 0 против некоторого ненулевого значения.Если
ORDER BY Baz
только для того, чтобы придать смысл,TOP
а не предоставить порядок представления результатов, и у вас нет индекса, поддерживающего это, то разделение на два запроса позволит избежать ненужной сортировки в этом0
случае.источник
SELECT TOP 100 PERCENT может использоваться для обхода любых ошибок с использованием «TOP» в запросе.
источник
источник
@x
), и теперь они спрашивают, какое значение передать, чтобы@x
оно означало «все строки» независимо от того, сколько строк в действительности имеется в таблице. Возможно, вы могли бы выяснить, как адаптировать ваше решение к требованиям ОП.(SELECT COUNT(*) FROM YourTable)
это не значение.