SQL Server не имеет констант или перечислений в этом смысле;параметры для функций или процедур требуют передачи строк, чисел или переменных.
Да, в отличие от возможности использовать четко определенные константы непосредственно во встроенных функциях и других структурах T-SQL.Может быть, это то, что мы увидим в будущем развитии языка, но это то, что мы имеем сегодня.
Для таких вещей, как DATEADD
, вы передаете идентификатор ... noteчто эти работы:
SELECT DATEADD([DAY], 1, GETDATE());
SELECT DATEADD("DAY", 1, GETDATE());
Но это не удастся:
SELECT DATEADD('DAY', 1, GETDATE());
Интересно, что это также не удастся (просто еще одно доказательство того, что это обрабатывается как идентификатор):
SET QUOTED_IDENTIFIER OFF;
SELECT DATEADD("DAY", 1, GETDATE());
Вы не можете написать свои собственные функции или процедуры, которые принимают идентификаторы в качестве входных данных - они всегда либо интерпретируются как неявно преобразованная строка (как в EXEC sp_who active;
), либо они просто не проходят проверку синтаксического анализа (как в приведенном выше примере).).Входные параметры для встроенных и пользовательских функций будут принимать выражения, а процедуры - нет.