如何在ADO.NET中将"DEFAULT"指定为SQL参数值?

Lly*_*yle 14 sql t-sql ado.net parameterized-query

我有一个针对SQL2005的参数化SQL查询,它是在代码中动态创建的,所以我使用ADO.NET SqlParameter类来添加sql参数SqlCommand.

在前面提到的SQL中,我从具有默认值的表值函数中进行选择.我希望我的动态sql有时为这些默认参数指定一个值,有时我想指定应该使用SQL DEFAULT- 如表值函数中定义的那样.

为了保持代码清洁,我不想动态添加SQL DEFAULT关键字并在使用非默认值时对其进行参数化,我只想将其设置DEFAULT为my的值SQLParameter.

我可以吗?在这种情况下,最佳做法是什么?

Bil*_*win 15

SQL查询参数取代文字值.

你不能发送SQL关键字作为参数的值,就像你不能发送表标识,列标识符,值列表(例如,对于一个IN谓语),或者一个表达式.该参数的值总是解释为文字值,因为如果你列入了引号的字符串常量或在查询数字文字.

抱歉,您必须准备该查询之前将SQL关键字包含在SQL 查询中.

  • 在存储过程中,如果将`SqlParameter.Value`设置为`null`,它会自动将`default`值发送到SQL Server.如果要将数据库字段设置为"null",请使用"DBNull.Value". (6认同)

Tho*_*mas 6

AFAIK,告诉SQL Server使用默认值的唯一方法是通过DEFAULT关键字或将其从参数列表中排除。这意味着DEFAULT必须在参数化的SQL语句中使用关键字。因此,类似:

Select ...
From dbo.udf_Foo( DEFAULT, @Param2, @Param3, DEFAULT, .... )
Run Code Online (Sandbox Code Playgroud)

我想另一种方法是查询系统目录中各种DEFAULT值的实际值,并确定是否以这种方式将SqlParameter设置为默认值,但这需要进行复杂的第二次查询才能获得默认值。