362 Stimmen

Wie man ein Array an eine gespeicherte SQL Server-Prozedur übergibt

Wie übergibt man ein Array an eine SQL Server Stored Procedure?

Ich habe zum Beispiel eine Liste von Mitarbeitern. Ich möchte diese Liste als Tabelle verwenden und sie mit einer anderen Tabelle verbinden. Aber die Liste der Mitarbeiter sollte als Parameter von C# übergeben werden.

4voto

dnndeveloper Punkte 1576

Ab SQL Server 2016 können Sie einfach Split-String verwenden

Ejemplo:

WHERE (@LocationId IS NULL OR Id IN (SELECT items from Split_String(@LocationId, ',')))

3voto

Shabir Mustafa Punkte 61
CREATE TYPE dumyTable
AS TABLE
(
  RateCodeId int,
  RateLowerRange int,
  RateHigherRange int,
  RateRangeValue int
);
GO
CREATE PROCEDURE spInsertRateRanges
  @dt AS dumyTable READONLY
AS
BEGIN
  SET NOCOUNT ON;

  INSERT  tblRateCodeRange(RateCodeId,RateLowerRange,RateHigherRange,RateRangeValue) 
  SELECT * 
  FROM @dt 
END

2voto

eselk Punkte 6542

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)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X