2009-02-26 12 views
3

Stellen Sie sich eine Tabelle mit GUIDs als Primärschlüssel vor. Ich möchte einige dieser Zeilen basierend auf ihrem Primärschlüssel auswählen. Ich möchte eine Abfrage verwenden wie:Ist es möglich Abfrageparameter zu verwenden, um das IN Schlüsselwort zu füllen

SELECT * FROM mytable WHERE id IN ('firstguidhere','secondguidhere'); 

ich ADO.NET bin mit der Datenbank abzufragen, so dass ich möchte eine parametrisierte Abfrage verwenden anstelle von dynamischen SQL, die offensichtlich funktionieren würde, aber ich möchte behalten Sie die Vorteile von parametrisierten Abfragen (Sicherheit, Escaping, etc ...).

Ist es möglich, die Sammlung für die IN-Klausel mit sql-Parametern zu füllen?

+0

Es gibt eine doppelte Frage hier irgendwo ... fand es ... –

+1

http: // stackoverflow.com/questions/337704/parameterizing-a-sql-in-clause –

+0

@ Jon, Die akzeptierte Antwort auf diese Frage ist nicht wirklich optimal, obwohl es ein Hack ist, den ich selbst oft verwendet habe, und wäre in Ordnung für kleinere Tabellen und/oder seltene Abfragen. – LukeH

Antwort

5

Sie können die Liste der GUIDs als durch Kommata getrennte String-Parameter und verwenden Sie einen Tabellenwert UDF spalten sie in eine Tabelle in Ihrer IN Klausel verwenden, übergeben:

SELECT * 
FROM my_table 
WHERE id IN (SELECT id FROM dbo.SplitCSVToTable(@MyCSVParam)) 

Erland Sommarskog hat eine interesting article mit Beispielen, wie kommaseparierte Strings mithilfe einer UDF in Tabellen aufgeteilt werden.

(Aus Performance-Gründen sollten Sie sicherstellen, dass Ihre UDF Inline-Tabellenwert ist, anstatt mit mehreren Anweisungen.)

+0

Vor kurzem wurde der Sommarskog Artikel verwendet, um ein ähnliches Problem zu lösen. Arbeitete großartig für unsere Bedürfnisse. – schooner

Verwandte Themen