微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql-server – VSCL8部署中的SQL CLR过程默认参数?

我知道在数据库中创建过程时我可以为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在使用其“部署项目”选项时自动执行此操作…

是否有一个属性可以设置在一个参数上,告诉visual studio当你在数据库中创建proc时,你想要该参数的认值是什么?

更新:我已经尝试设置可空性“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
    )
{
}

解决方法

Is there an attribute one can set on an argument to tell visual studio what you want the default value for that argument to be,when it creates the proc in the database?

截至今天,答案是一个响亮的“不”,不幸的是. 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语句(如果使用“Generate DDL”选项),或
> CREATE语句(如果不使用“Generate DDL”选项)

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

我也在努力解决SSDT发布过程中这个漏洞的问题,并允许以编程方式设置这些选项.如果我开始工作,我会用详细信息更新这个答案.

原文地址:https://www.jb51.cc/mssql/78571.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐