В SQL Server 2008 у меня есть приложение, в котором пользователи могут запускать запросы к базе данных. Я хочу, чтобы они не запускали запрос, который будет возвращать миллионы результатов и ресурсов системы налогообложения. В настоящее время решение обертка любой запрос ввода в счете функция (*), как так:Общий синтаксис столбца SQL Server
Select count(*) as COUNT
from (SELECT SOMETHING FROM SOMETABLE) as TMPCOUNT0;
отлично работает до тех пор, пока пользователь не пытается запустить COUNT(*)
самостоятельно.
Select count(*) as COUNT
from (SELECT COUNT(*) FROM SOMETABLE) as TMPCOUNT0;
--(should return 1)
Однако SQL Server не нравится, что мой внутренний COUNT(*)
столбец не имеет имени в моей производной таблицы и ошибки с помощью:
Нет Имя столбца не было указано для столбца 1 «TMPCOUNT0».
Я знаю, что я мог бы исправить это, если бы я при выполнении запроса, указав имя для внутреннего счета, но так как конечные пользователи не знают об этом, я надеюсь найти более элегантное решение.
Любые идеи?
Я всегда делаю это: SELECT count ('x') FROM SOMETABLE; он не должен извлекать ни один столбец. Я бы не использовал count() дважды. –
@ Эрик К. Юнг: это городской миф, что 'COUNT (1)' более эффективен, чем 'COUNT (*)' - оптимизатор запросов SQL Server достаточно умен, чтобы понять, что это всего лишь операция COUNT - это не будет «извлекать» все данные только из-за (*) в выражении ... –
@ Эрик К. Юнг, @marc_s: городской миф действительно :-) http://stackoverflow.com/questions/1221559/count-vs- count1/1221649 # 1221649 – gbn