Es hat lange gedauert, bis ich das herausgefunden habe, also falls es jemand braucht...
Dies basiert auf der SQL 2005-Methode in Aarons Antwort, und unter Verwendung seiner SplitInts-Funktion (ich habe nur den Delim-Parameter entfernt, da ich immer Kommas verwenden werde). Ich verwende SQL 2008, aber ich wollte etwas, das mit typisierten Datasets (XSD, TableAdapters) funktioniert, und ich weiß, dass String-Params mit diesen funktionieren.
Ich habe versucht, seine Funktion in einer Klausel vom Typ "where in (1,2,3)" zum Funktionieren zu bringen, und hatte auf direktem Weg kein Glück. Also habe ich zunächst eine temporäre Tabelle erstellt und dann eine innere Verknüpfung anstelle der "where in"-Klausel vorgenommen. Hier ist mein Anwendungsbeispiel. In meinem Fall wollte ich eine Liste von Rezepten erhalten, die bestimmte Zutaten nicht enthalten:
CREATE PROCEDURE dbo.SOExample1
(
@excludeIngredientsString varchar(MAX) = ''
)
AS
/* Convert string to table of ints */
DECLARE @excludeIngredients TABLE (ID int)
insert into @excludeIngredients
select ID = Item from dbo.SplitInts(@excludeIngredientsString)
/* Select recipies that don't contain any ingredients in our excluded table */
SELECT r.Name, r.Slug
FROM Recipes AS r LEFT OUTER JOIN
RecipeIngredients as ri inner join
@excludeIngredients as ei on ri.IngredientID = ei.ID
ON r.ID = ri.RecipeID
WHERE (ri.RecipeID IS NULL)