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发布过程中这个漏洞的问题,并允许以编程方式设置这些选项.如果我开始工作,我会用详细信息更新这个答案.