2009-03-06 19 views

cevap

0

hepsi aynı "anahtar" (belki bir GUID) ile, masa B'ye bireysel kimliklerini yazın.
Sonra, masa A'ya karşı sorgu

where ID in (select ID from B where key = @TempKey) 

(onlarla bittiğinde eğer Ardından anahtarlarını silin olabilir. Ya da, onları damgası ve bunu daha sonra bir sql iş var.) Yer alacak

Artıları:

  • buradan bazı durumlarda enjeksiyon sql maruz olabilecek bir dize göndermeyin.
  • diğer uygulama mantığı bağlı olarak, izlemek veya tek seferde olanaklarını yazmak zorunda değilsiniz.

Eksileri:

  • Özellikle ağır yükler altında, son derece verimsiz olabilir.
11

... Bu cevaba bakınız.

İlk özel tipini saklı yordam daha

CREATE TYPE Array AS table (Item varchar(MAX)) 

oluşturun.

CREATE PROCEDURE sp_TakeArray 
    @array AS Array READONLY 
AS BEGIN 
    Select * from Foo Where ID in (SELECT Item FROM @array) 
END 

Sonra kullandığınız veritabanı dizisi

DataTable items = new DataTable(); 
items.Columns.Add("Item", typeof(string)); 

DataRow row = items.NewRow(); 
row.SetField<string>("Item", <item to add>); 
items.Rows.Add(row); 

SqlCommand command = new SqlCommand("sp_TakeArray", connection); 
command.CommandType = CommandType.StoredProcedure; 
SqlParameter param = command.Parameters.Add("@Array", SqlDbType.Structured); 
param.Value = items; 
param.TypeName = "dbo.Array"; 

SqlDataReader reader = command.ExecuteReader(); 
+0

Bu SQL Server 2008 için geçerlidir. –

İlgili konular