0
在TSQL我可以這樣寫:C#語法TSQL 「IN」 參數
Select * from mytablename M where M.field in (1, 5, 8, 56)
如果我想要做同樣的事情在參數C#中,什麼是語法?
在TSQL我可以這樣寫:C#語法TSQL 「IN」 參數
Select * from mytablename M where M.field in (1, 5, 8, 56)
如果我想要做同樣的事情在參數C#中,什麼是語法?
SQL Server 2008有一個名爲Table-Valued Parameters的特性。你在SQL Server中創建一個「特殊類型」,然後你可以傳遞一個DataTable
作爲參數,包含你想要的所有值。
你可以用這種方式:
在DB這樣做:CREATE TYPE dbo.IntArray AS TABLE (Value INT NOT NULL)
您的查詢必須改變,以這樣的: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
和Table-Valued參數,並同時在多個條件下執行搜索。
(注意,是因爲它是基於微軟的AdventureWorks的DB工作的例子我的代碼過長)
你的意思是'IN(@ P1,P2 @,@ P3,P4 @)'? –
只是我的腦溢出了.. –
它有助於當downvotes伴隨着什麼是缺乏評論。 – hatchet