2009-03-06 14 views

Respuesta

0

Escriba los ID individuales en la tabla B, todos con la misma "clave" (quizás un GUID).
Entonces, su consulta en el cuadro A incluiría

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

(A continuación, puede eliminar las claves, si ha terminado con ellos. O, fecha y hora y tener un trabajo SQL hacerlo más adelante.)

Pros:

  • no envía una cadena, lo que podría exponerlo a la inyección de SQL en algunas circunstancias.
  • Según la lógica de su otra aplicación, no tiene que rastrear o escribir las posibilidades de una sola vez.

Contras:

  • Podría ser extremadamente ineficiente, especialmente bajo cargas pesadas.
11

Con SQL2005 y por encima de usted puede enviar un conjunto de código directamente.

En primer lugar crear un tipo personalizado

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

que el procedimiento almacenado.

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

A continuación, llame a partir del código que pasa en un DataTable como la matriz

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

Esto solo es aplicable al servidor Sql 2008. –

Cuestiones relacionadas