0

すべてが共通の同じフィールドを持ついくつかのテーブルを更新する必要があります。

現在、次のようにテーブルごとに個別の更新ステートメントがあります。

try
        {
            using (SqlConnection conn = new SqlConnection(cCon.getConn()))
            {

                using (SqlCommand cmd = conn.CreateCommand())
                {
conn.Open();
                    cmd.CommandText = "update table0 set active= 'N' where id=@id";
                    cmd.Parameters.Add(new SqlParameter("@id", id));
                    cmd.ExecuteNonQuery();

                    cmd.Parameters.Clear();
                    cmd.CommandText = "update table1 set active= 'N' where id= @id ";
                    cmd.Parameters.Add(new SqlParameter("@id", id));
                    cmd.ExecuteNonQuery();

                    cmd.Parameters.Clear();
                     cmd.CommandText = "update table2 set active= 'N' where id= @id "
                    cmd.Parameters.Add(new SqlParameter("@id", id));
                    cmd.ExecuteNonQuery();

                    cmd.Parameters.Clear();
                    cmd.CommandText = "update table4 set active= 'N' where id= @id "
                    cmd.Parameters.Add(new SqlParameter("@id", id));
                    cmd.ExecuteNonQuery();
                }
            }
        }

コードを最適化して呼び出しを減らすことはできますか? すべての更新を 1 つのコマンドテキストにまとめて、1 回だけ実行することはできますか?

それはすべて同じパラメータなので、可能だと思いますか?または、ストアドプロシージャを作成する必要がありますか?

4

3 に答える 3

1

理想的には、ストアド プロシージャを呼び出してこれを処理します。ただし、ステートメント バッチで同じパラメーターを使用しても同様に機能します。

cmd.CommandText = @"update table0 set active= 'N' where id=@id;
      update table1 set active= 'N' where id= @id;
      update table2 set active= 'N' where id= @id;
      update table4 set active= 'N' where id= @id;";
cmd.Parameters.Add(new SqlParameter("@id", id));
cmd.ExecuteNonQuery();
于 2013-03-27T15:59:07.637 に答える
1
const string query = @"update {0} set active= 'N' where id=@id;";

public string GetCommandText(string table)
{
    return string.Format(query, table);
}

public IEnumerable<string> GetTables()
{
    yield return "table0";
    yield return "table1";
    yield return "table2";
    yield return "table4";
}

using (SqlCommand cmd = conn.CreateCommand())
{
    cmd.Parameters.Add(new SqlParameter("@id", id));
    cmd.CommandText = GetTables().Select(GetCommandText).Aggregate((s, s1) => s + s1);

    conn.Open();
    cmd.ExecuteNonQuery();
}
于 2013-03-27T16:04:42.703 に答える
0

削除します

cmd.Parameters.Clear();

そして、あなたはこのコードを一度だけ使用します

 cmd.Parameters.Add(new SqlParameter("@id", id));

それで :

cmd.CommandText = "update table0 set active= 'N' where id=@id";
                    cmd.Parameters.Add(new SqlParameter("@id", id));
                    cmd.ExecuteNonQuery();


                    cmd.CommandText = "update table1 set active= 'N' where id= @id ";
                    cmd.ExecuteNonQuery();

                     cmd.CommandText = "update table2 set active= 'N' where id= @id "
                    cmd.ExecuteNonQuery();

                    cmd.CommandText = "update table4 set active= 'N' where id= @id "
                    cmd.ExecuteNonQuery();
                    cmd.Parameters.Clear();
于 2013-03-27T15:56:58.803 に答える