2009-12-21 1 views
0

Je suis à la recherche d'idées/solutions au problème suivant.procédure stockée SQL qui sélectionne le paramètre d'entrée array/list/xml

Requiert une procédure stockée qui accepte un seul paramètre (tableau, liste, collection, xml, etc ...). Pour chaque élément du tableau/liste/collection/xml il exécutera une requête comme celle-ci:

Select * from <some table> t 
Where t.Name = Parameter.Name and t.datetime = Parameter.datetime 

Les résultats seraient tous retournés comme un ensemble unique de résultat.

À titre d'exemple, cette procédure sera appelée avec les détails suivants transmis en tant que valeur du paramètre:

Livres 09/09/2009 11:23:23

Livres 09/09/2009 11: 23:23 Auteurs 04:22:04

Livres 09/09/2009 11:23:23 Auteurs 04:22:04 Catalogue 9:45:11

Vous cherchez une variété d'idées pour effectuer un certain stress/timings à ce sujet.

Merci

+1

en double (plusieurs fois): http://stackoverflow.com/questions/1922191/passing-array-as-parameter-to-sql-2005-stored-procedure –

+0

Y at-il un raison pour laquelle vous voulez que ces instructions soient générées dans une procédure stockée plutôt que dans un code compilé? – Zack

Répondre

1
CREATE TYPE id_list AS TABLE (
    id int NOT NULL PRIMARY KEY 
); 
GO 

CREATE PROCEDURE [dbo].[tvp_test] (
     @param1   INT 
    , @customer_list id_list READONLY 
) 
AS 
BEGIN 
    SELECT @param1 AS param1; 

    -- join, filter, do whatever you want with this table 
    -- (other than modify it) 
    SELECT * 
    FROM @customer_list; 
END; 
GO 

DECLARE @customer_list id_list; 

INSERT INTO @customer_list (
    id 
) 
VALUES (1), (2), (3), (4), (5), (6), (7); 

EXECUTE [dbo].[tvp_test] 
     @param1 = 5 
    , @customer_list = @customer_list 
; 
GO 

DROP PROCEDURE dbo.tvp_test; 
DROP TYPE id_list; 
GO 
Questions connexes