【问题标题】:SQL CLR Procedure Default Parameter in VS2008 deployment?VS2008部署中的SQL CLR过程默认参数?
【发布时间】:2011-09-19 05:52:59
【问题描述】:

我知道在数据库中创建过程时可以为 CLR 过程定义默认值,如下所示:

CREATE PROCEDURE [dbo].[ShredXml] (
    @InputXml [xml], 
    @AttributeElementHandling [tinyint] = 0,
    @ConversionHandling [tinyint] = 0,
    @RootElementName [nvarchar](255) = null
    )
AS EXTERNAL NAME [ClrXmlShredder].[ClrXmlShredder].[ShredXml]

我不知道是否有任何方法可以说服 Visual Studio 在使用其“部署项目”选项时自动执行此操作...

当它在数据库中创建 proc 时,是否可以在参数上设置一个属性来告诉 Visual Studio 您希望该参数的默认值是什么?

更新:我尝试设置可空性“SqlFacet”,这似乎没有任何效果(我猜这是有道理的 - afaik 存储的 proc 参数总是可以为空的?)

[Microsoft.SqlServer.Server.SqlProcedure]
public static void ShredXml(SqlXml InputXml, 
    [SqlFacet(IsNullable = true)]SqlByte AttributeElementHandling, 
    [SqlFacet(IsNullable = true)]SqlByte ConversionHandling, 
    [SqlFacet(MaxSize = 255, IsNullable = true)]string RootElementName
    )
{
}

【问题讨论】:

  • 你有没有碰巧找到解决这个问题的方法?
  • @tbone 不,我没有,但老实说,两年多前我也不再担心这个问题了,使用 VS2008;不知道以后的版本有没有变化。

标签: sql-server visual-studio-2008 deployment sqlclr sql-server-data-tools


【解决方案1】:

您可以在函数中定义默认值。当从底层 SQL 端包装器传递 null 时,将使用它们。只需声明没有默认值的过程参数并将默认值设置为函数。应该没问题。

【讨论】:

  • 谢谢,但这并不是我真正要问的。如果我按照你说的做,那么我的 proc 的调用者需要说“EXEC ShredXml @Value,null,null,null”之类的东西。我希望他们能够只说“EXEC ShredXml”。不是什么大问题/设计问题,因为有手动发布的解决方法 - 只是关于 Visual Studio 自动部署的问题。
【解决方案2】:

当它在数据库中创建 proc 时,是否可以在参数上设置一个属性来告诉 Visual Studio 您希望该参数的默认值是什么?

不幸的是,截至今天,答案是响亮的“不”。 SSDT 不支持很多选项,例如为标量 UDF 指定 WITH RETURNS NULL ON NULL INPUT 等。

我打开了一个连接建议来支持参数默认值,SSDT - Support T-SQL parameter defaults for SQLCLR objects via the SqlFacet attribute when generating the publish and create SQL scripts,但到目前为止的官方说法是:“好主意,但不会很快发生”。

所以现在最好的办法是创建一个部署后脚本(在 SQL Server/用户脚本中找到)并添加任一

  • ALTER 语句(如果使用“生成 DDL”选项),或
  • CREATE 语句(如果不使用“生成 DDL”选项)

根据需要重新定义存储过程和/或函数属性。部署后脚本附加到生成的部署脚本的末尾。

我也在做一些事情,希望能修复 SSDT 发布过程中的这个漏洞,并允许以编程方式设置这些选项。如果我得到它的工作,我会用详细信息更新这个答案。

【讨论】:

    猜你喜欢
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 2012-02-14
    相关资源
    最近更新 更多