SqlCommandBuilder.DeriveParameters(command) 和 IsNullable

Posted

技术标签:

【中文标题】SqlCommandBuilder.DeriveParameters(command) 和 IsNullable【英文标题】:SqlCommandBuilder.DeriveParameters(command) and IsNullable 【发布时间】:2010-04-12 03:59:48 【问题描述】:

我编写了一个 O/R 数据库包装器,它为它从数据库中读取的存储过程生成一些包装器方法。

现在,如果存储过程的输入参数默认为 NULL,我需要生成一些自定义包装器代码。问题是 - 我使用以下方法获取存储的 proc 参数:

SqlCommandBuilder.DeriveParameters(command)

并且它不会带来参数​​默认值。有没有办法查找这些默认值?它们是否存储在数据库中的任何位置?

顺便说一句,我使用的是 SQL Server 2008

【问题讨论】:

【参考方案1】:

对于 T-SQL 存储过程,执行此操作的唯一方法是从 sys.sql_modules 表中解析过程定义。来自 sys.parameters 表上关于 has_default_value 列的 BOL:

1 = 参数具有默认值。

SQL Server 只维护默认 此目录中 CLR 对象的值 看法;因此,该列具有 Transact-SQL 对象的值为 0。 查看默认值 Transact-SQL 对象中的参数, 查询定义列 sys.sql_modules 目录查看,或者使用 OBJECT_DEFINITION 系统函数。

这是一篇写给编写 T-SQL 函数的人的文章,据说就是这样做的:Figure Out the Default Value of Stored Procedure Parameters.

【讨论】:

谢谢!我怀疑我必须解析 proc 定义才能获得默认值,我很高兴有人已经这样做了 :)【参考方案2】:

基本上,sqlcommandbuilder 类会自动生成单表命令,用于协调对数据集所做的更改与 sql server。

【讨论】:

这不是答案。问题是:如何获取过程的参数默认值?

以上是关于SqlCommandBuilder.DeriveParameters(command) 和 IsNullable的主要内容,如果未能解决你的问题,请参考以下文章