Il s'agit en fait d'un doublon des liens que vous avez publiés. Au lieu d'essayer d'analyser une liste de valeurs, transmettez un paramètre table.
Créez d'abord le type du paramètre dans la base de données (une seule fois).
CREATE TYPE [dbo].[IdList] AS TABLE(
[Id] int NULL
);
Créez ensuite une procédure qui accepte ce paramètre :
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
Du côté du client, créez un DataTable avec une seule colonne de type int appelée Id
, remplissez-le avec les identifiants que vous voulez puis utilisez-le comme valeur du @groupIds
paramètre
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;
J'ai copié ceci à partir de la question en double avec quelques modifications.