Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Liste der Zeichenfolgen an eine gespeicherte Prozedur übergeben

Dies ist wirklich ein Duplikat der Links, die Sie gepostet haben. Anstatt zu versuchen, eine Werteliste zu parsen, übergeben Sie einen Tabellenwertparameter.

Erstellen Sie zuerst den Typ des Parameters in der Datenbank (nur einmal).

CREATE TYPE [dbo].[IdList] AS TABLE(
    [Id] int NULL
);

Erstellen Sie dann eine Prozedur, die diesen Parameter akzeptiert:

CREATE PROCEDURE [dbo].[GetWorkspaceMapDetailsForUserByGroups]
    @workspaceID int,
    @groupIds IdList READONLY
AS
BEGIN
SELECT 
  m.*
FROM GeoAppMapDef m 
    inner join @groupIds on [email protected]
WHERE
    m.workspaceID = @workspaceID
    and m.IsDeleted = 0
END

Erstellen Sie auf der Clientseite eine DataTable mit einer einzelnen int-typisierten Spalte namens Id , füllen Sie es mit den gewünschten IDs und verwenden Sie es dann als Wert für @groupIds Parameter

var table = new DataTable();
table.Columns.Add("Id", typeof(int));

for (int i = 0; i < 10; i++)
    table.Rows.Add(i);

var pList = new SqlParameter("@groupIds", SqlDbType.Structured);
pList.TypeName = "dbo.IdList";
pList.Value = table;

Ich habe dies mit einigen Änderungen aus der doppelten Frage kopiert.