1

私はこのクエリを持っています:

s="update myTable set date='09/09/12' where crc32 in("+list+")";

しかし、私のリストには何千もの値が含まれているため、もっと良い方法があると思います。どのように、またはどのように、私は知りません。

更新: 列crc32intです。は次のlistような文字列です。

list = "2345,-6467,7865,7654,...."

c# でクエリを実行します。私のコードだけでは、SQLクエリでは取得できない値がlist含まれています。

ありがとう

4

2 に答える 2

2

テーブル値パラメーターを確認してください。http://msdn.microsoft.com/en-us/library/bb510489.aspx次のようにストアド プロシージャに入れます。

create procedure mysp
@tvp tvp_list readonly
as
 update mt
 set date='09/09/12'
 from mytable mt
 join @tvp t on tvp.id = crc32

そして、crc32を含むデータテーブルパラメーターを使用してC#から呼び出します

var cmd = new SqlCommand(CommandText = "prc_update",conn);

...

var dt = new DataTable();
dt.Columns.Add("crc32",typeof(string));
..... you can add more if you like
foreach(var item in myList)
{
  var row = dt.NewRow();
  row["crc32"] = item;
  dt.Rows.Add(row);
}

cmd.Parameters.Add("@tvp", System.Data.SqlDbType.Structured);
cmd.Parameters["@tvp"].Value = dt;

.....

conn.Open();
cmd.ExecuteNonQuery();
于 2012-09-23T10:54:52.057 に答える
1

Listデータベースのどこかにありますか?

UPDATE使用した方がおそらく速いので、テーブルを作成してそこに入れ、を使用してをJOIN実行する方が速いかもしれません。ListUPDATEJOIN

于 2012-09-23T10:55:27.813 に答える