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.