0

TSQL では、次のように記述できます。

Select * from mytablename  M where M.field in (1, 5, 8, 56)

パラメータ化されたC#で同じことをしたい場合、構文は何ですか?

4

1 に答える 1

1

SQL Server 2008 には、テーブル値パラメーターと呼ばれる機能があります。SQL Server で「特別な型」を作成すると、必要なDataTableすべての値を含む a をパラメーターとして渡すことができます。

次のように使用できます。

DB で次のようにします。CREATE TYPE dbo.IntArray AS TABLE (Value INT NOT NULL)

IN クエリを次のように変更する必要があります。CustomerID IN (SELECT Value FROM @1)

// Your array of IDs
int[] ids = new[] { 1, 2, 3, 4, 5, 6, 7, 10 };

using (var connection = new SqlConnection("Initial Catalog=AdventureWorksLT2012;Integrated Security=True"))
{
    connection.Open();

    using (var command = new SqlCommand("SELECT CustomerID FROM SalesLT.Customer WHERE CustomerID IN (SELECT Value FROM @1)", connection))
    {
        // An untyped Datatable
        var dt = new DataTable();

        // With a single column
        dt.Columns.Add();

        // Copy your IDs in the DataTable
        foreach (var v in ids)
        {
            dt.Rows.Add(v);
        }

        // Create the Table-Valued Parameter
        var param = command.Parameters.AddWithValue("@1", dt);
        param.SqlDbType = SqlDbType.Structured;
        param.TypeName = "dbo.IntArray";

        using (var reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                int id = (int)reader[0];

                Console.WriteLine(id);
            }
        }
    }
}

技術的には、次のような場合でもクエリを変更できます

INNER JOIN @1 Par ON CustomerID = Par.Value

DataTableこれには、複数列のテーブル値パラメーターを作成し、同時に複数の条件で検索できるという利点があります。

(Microsoft の AdventureWorks db に基づいた実際の例であるため、私のコードは長すぎることに注意してください)

于 2013-08-16T14:02:14.240 に答える