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

相互に一致する必要がある where 句内の複数の「in」ステートメント

    次のように、テーブル タイプを作成して値を渡すことができます。

    CREATE TYPE Suite_Lease AS TABLE
    (
    suite_id varchar(15) NOT NULL,
    lease_id varchar(15) NOT NULL
    )
    GO
    CREATE PROC DoUpdate
      @Params Suite_Lease READONLY,
      @uplift varchar(15),
      @code varchar(15)
    AS
      update  property.lease_period  set
         scca_uplift = @uplift,
         scca_notes_code = @code
      from property.lease_period tab
      JOIN @params filt
        on tab.suite_id=filt.suite_id AND tab.lease_id=filt.lease_id
    

    これにより、プロシージャ キャッシュが保持されます 複数の "大きな" where 句を使用している場合は、ドライ アンド クリーン

    テーブル パラメータをストアド プロシージャに渡す方法 (c#):

            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("suite_id", typeof (string)) {AllowDBNull = false, MaxLength = 15});
            dt.Columns.Add(new DataColumn("lease_id", typeof (string)) {AllowDBNull = false, MaxLength = 15});
            dt.Rows.Add("CCBG08", "205059");
    
            ... add more rows for match
    
            using (var c = new SqlConnection("ConnectionString"))
            {
                c.Open();
                using(var sc = c.CreateCommand())
                {
                    sc.CommandText = "DoUpdate";
                    sc.CommandType = CommandType.StoredProcedure;
                    sc.Parameters.AddWithValue("@uplift", "110");
                    sc.Parameters.AddWithValue("@code", "21006");
                    sc.Parameters.Add(new SqlParameter("@Params", SqlDbType.Structured) { TypeName = null, Value = dt });
                    sc.ExecuteNonQuery();
                }
            }
    


    1. iOSSDK4.2を使用したlibpqのコンパイル

    2. SQLAlchemyを介してPostgresqlで複数のステートメントを実行しても、変更は永続化されません

    3. 列名の競合をどのように回避しますか?

    4. 間違ったMySQL更新クエリ後の回復?