sql >> データベース >  >> RDS >> Sqlserver

ストアド プロシージャの複数値の日付パラメーターですか?

    テーブル値パラメーター を使用しない理由 ?

    ユーザー定義のテーブル型 DateTimes を作成します SQL

    create type DateTimes as table
    (
        [Value] datetime
    )
      

    次に、ストアド プロシージャを修正します。

    ALTER PROCEDURE spSelectPlacementData
    (
        @ClientID           SMALLINT,
        @SourceFileDates    DateTimes readonly -- must be readonly
    )
      

    @SourceFileDates を扱えるようになりました 読み取り専用のテーブル変数として。

    SqlCommand を指定する場合 パラメーター、テーブル値パラメーターは SqlDbType.Structured DataTable として渡されます または DataRowcollection .したがって、次のように設定できます:

    var sourceFileDates = new DataTable();
    sourceFileDates.Columns.Add("Value", typeof(DateTime));
    foreach (DateTime file in job.sourceFiles)
    {
        sourceFileDates.Rows.Add(file);
    }
    selectRunCommand.Parameters.Add(new SqlParameter {
        ParameterName = "@SourceFileDates", 
        Value = sourceFileDates,
        SqlDbType = SqlDbType.Structured // make sure you specify structured
    });
      

    これで、すべてが正しく適切に型付けされました...そして、文字列の解析やキャストを行う必要はありません.

    補足として、先に進んで Strings を作成することもできます。 および Integers タイプも。 TVP に夢中になり、あらゆる場所で使用できます。



    1. SQLデータベースの回復保留中のアクセス拒否の問題を修正

    2. Mysql接続がローカルホストで拒否されました

    3. SQL Server の別のデータベースに復元する方法は?

    4. Rails:rake db:create:allにデータベースを作成するためのPostgres権限が拒否されました