Мне были нацелены на параметризованный SQL-запрос для SQL2005, который динамично создается в коде, таким образом, я использовал ADO.NET SqlParameter
класс для добавления sql параметров к SqlCommand
.
В вышеупомянутом SQL я выбираю из Табличной функции с, имеет значения по умолчанию. Я хочу, чтобы мой динамический sql иногда указал значение для этих параметров по умолчанию, и другие времена, я хочу указать что SQL DEFAULT
- как определено в Табличной функции - должен использоваться.
Для содержания кода в чистоте, я не хотел динамично добавлять SQL DEFAULT
ключевое слово и параметризовало его, когда не по умолчанию должно использоваться, я просто хотел установить DEFAULT
как значение моего SQLParameter
.
Могу я? Что такое лучшая практика в таком экземпляре?
Параметры SQL-запроса занимают место литеральных значений только.
В качестве значения параметра нельзя передать ключевое слово SQL, так же как нельзя передать идентификатор таблицы, идентификатор столбца, список значений (например, для предиката IN
) или выражение. Значение параметра всегда интерпретируется как литеральное значение, как если бы вы включили в запрос литерал строки в кавычках или числовой литерал.
Извините, но вы должны включить ключевое слово SQL как часть SQL-запроса до подготовки этого запроса.
AFAIK, единственный способ указать SQL Server использовать значение по умолчанию - использовать ключевое слово DEFAULT
или исключить его из списка параметров. Это означает, что ключевое слово DEFAULT
должно использоваться в параметризованном операторе SQL. Итак, что-то вроде:
Select ...
From dbo.udf_Foo( DEFAULT, @Param2, @Param3, DEFAULT, .... )
Я полагаю, что другим подходом было бы запросить системные каталоги для фактического значения различных значений DEFAULT
и определить, устанавливать ли SqlParameter в значение по умолчанию таким образом, но это требуется запутанный второй запрос для получения значений по умолчанию.