如何使用SQL Server声明可空的guid作为C#CLR存储过程的可选参数

前端之家收集整理的这篇文章主要介绍了如何使用SQL Server声明可空的guid作为C#CLR存储过程的可选参数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在编写一个部署在sql Server 2008 R2(所以.Net 3.5)上的C#存储过程,并且想声明一个可选参数作为可空的guid.这是我先试过的
[Microsoft.sqlServer.Server.sqlProcedure]
public static void spCalcPerc(
     sqlGuid pID,sqlGuid sID = DBNull.Value
    )

这与编译时错误失败:

Default parameter value for ‘sID’ must be a compile-time constant

这是因为DBNull.Value不是一个常数,这是一个痛苦.

所以我尝试将声明更改为:

[Microsoft.sqlServer.Server.sqlProcedure]
public static void spCalcPerc(
     sqlGuid pID,Guid? sID = null
    )

这个编译,但现在我得到这个部署错误

Deploy error : Could not create a type for parameter System.Nullable

试:

,sqlGuid sID = null

给这个编译时错误

A value of type ‘< null >’ cannot be used as a default parameter because there are no standard conversions to type
‘System.Data.sqlTypes.sqlGuid’

所以感觉比较卡住我诉诸于此:

,sqlGuid sID = "00000000-0000-0000-0000-000000000000"

我不想做代码中的字符串测试,就像一个kludge.但是,我不会收到这个编译错误

A value of type ‘string’ cannot be used as a default parameter because there are no standard conversions to type ‘System.Guid’

Gah,4种不同的方法,没有一种工作.叹

请感谢您的想法或推动正确的方向.

解决方法

尝试
,sqlGuid sID = New Guid()

您可以使用

if (sID == Guid.Empty)

检查是否尚未分配值.

原文链接:/mssql/81225.html

猜你在找的MsSQL相关文章