有没有办法确定存储过程中的参数在代码 - .Net 中是否具有默认值(因此不需要)?
我已经从像这样发送的存储过程中提取参数:
foreach (SqlParameter param in cmd.Parameters)
{
if ((param.Direction == ParameterDirection.Input) || (param.Direction == ParameterDirection.InputOutput))
{
jsonReturn += "{\"paramName\":\"" + param.ParameterName + "\", \"paramType\":\"" + param.SqlDbType.ToString() + "\"},";
}
}
我查看了 SqlParameter 对象,但找不到一种方法来查看它是否可以告诉我参数是否有默认值...(尽管我的调试器正在运行很奇怪,所以谁知道)。
我正在做的是为用户构建一种存储过程助手。我目前告诉他们属于他们选择的存储过程的所有参数。我真的很希望能够知道它们是否是必需的。
I am already pulling the parameters from the stored proc sent in like this:
foreach (SqlParameter param in cmd.Parameters)
{
if ((param.Direction == ParameterDirection.Input) || (param.Direction == ParameterDirection.InputOutput))
{
jsonReturn += "{\"paramName\":\"" + param.ParameterName + "\", \"paramType\":\"" + param.SqlDbType.ToString() + "\"},";
}
}
I looked into the SqlParameter object and could not find a way to see if it could tell me whether the Parameter had a default value... (although my debugger is acting weird, so who knows).
What I am doing is building a sort of Stored Proc helper for users.. I currently tell them all the parameters that belong to the Stored Proc they pick.... I WOULD REALLY like to be able to tell whether they are required.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
更新 Devart 的 SQL - 非常感谢你,我需要找到默认值是什么,而不仅仅是他们是否有默认值,你的代码让我开始了。
它确实有一个小错误:如果参数名称包含“at”(如@d_at_e),则其余参数不会被处理。
使用变量也可以大大加快速度。
如果没有默认值,则返回 null,否则返回声明中“=”和“,”之间的所有内容。
Update to Devart's SQL - thank you so much, I needed to find what the default values are, not just if they had one, and your code got me started.
It did have a small bug: if a parameter name contained 'at' (like @d_at_e), the remaining parameters were not processed.
Using the variables speeds it up a lot, too.
Returns null if no default, otherwise returns everything between the '=' and the ',' in the declaration.
为了直接回答您的问题,不(可能)没有办法确定存储过程参数是否拥有“代码中”的默认值(即使用
SqlParameter
类)。在 SQL Server(至少 SQL Server 2005)中,您可以查询系统目录视图 sys.parameters(并将其连接到目录视图 sys.procedures)并评估
has_default_value
列的值。To directly answer your question, no there is (probably) no way to determine if a stored procedure parameter possesses a default value 'in code' (i.e. using the
SqlParameter
class).In SQL Server (at least SQL Server 2005), you can query the system catalog view
sys.parameters
(and join it to the catalog viewsys.procedures
) and evaluate the value of the columnhas_default_value
.尝试这个查询。它返回任何存储过程/函数的默认值 -
Try this query. It returns default values for any stored procedure/function -
如果您正在寻找用于管理 SQL Server 对象的开发工具,那么更好的选择可能是 SMO。看起来您可以使用 StoredProcedureParameter 类。
http: //msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.parameter.defaultvalue(v=SQL.100).aspx
If you are looking at developing tools for management of SQL Server objects then a better option may be SMO. It looks like you can get to the default value of a stored procedure parameter using the StoredProcedureParameter Class.
http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.parameter.defaultvalue(v=SQL.100).aspx