8

次のように、データベースでプロシージャを作成するときに、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を作成するときに、その引数のデフォルト値をビジュアルスタジオに伝えるために引数に設定できる属性はありますか?

更新: null 可能性 "SqlFacet" を設定しようとしましたが、効果がないように見えました (これは理にかなっていると思います - 保存された proc パラメータは常に null 可能ですか?)

[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
    )
{
}
4

2 に答える 2

1

データベースにprocを作成するときに、その引数のデフォルト値をビジュアルスタジオに伝えるために引数に設定できる属性はありますか?

残念ながら、今日の時点で、答えは圧倒的に「いいえ」です。WITH RETURNS NULL ON NULL INPUTSSDT は、スカラー UDF の指定など、かなりの数のオプションをサポートしていません。

パラメーターの既定値をサポートするための接続の提案を開いたSSDT - パブリッシュおよび SQL スクリプトの作成時に SqlFacet 属性を介して SQLCLR オブジェクトの T-SQL パラメーターの既定値をサポートしますが、これまでの公式の言葉は次のとおりです。いつでもすぐに起こる」。

したがって、現時点では、配置後スクリプト (SQL Server / ユーザー スクリプトにあります) を作成し、次のいずれかを追加することをお勧めします。

  • ALTERステートメント (「Generate DDL」オプションを使用する場合)、または
  • CREATEステートメント (「Generate DDL」オプションを使用しない場合)

そこで、必要に応じてストアド プロシージャや関数のプロパティを再定義します。配置後スクリプトは、生成された配置スクリプトの末尾に追加されます。

また、SSDT パブリッシュ プロセスのこのギャップを修正し、これらのオプションをプログラムで設定できるようにするための作業も行っています。動作するようになったら、この回答を詳細で更新します。

于 2015-08-28T15:07:01.727 に答える
0

関数でデフォルト値を定義できます。これらは、基になる SQL 側のラッパーから null が渡されたときに使用されます。デフォルトなしでプロシージャパラメータを宣言し、関数にデフォルトを設定するだけです。大丈夫なはずです。

于 2011-07-13T22:36:58.247 に答える