Esto es realmente un duplicado de los enlaces que publicaste. En lugar de intentar analizar una lista de valores, pase un parámetro con valores de tabla.
Primero cree el tipo de parámetro en la base de datos (solo una vez).
CREATE TYPE [dbo].[IdList] AS TABLE(
[Id] int NULL
);
Luego cree un procedimiento que acepte este parámetro:
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
Del lado del cliente, cree un DataTable con una sola columna de tipo int llamada Id
, rellénelo con los ID que desee y luego utilícelo como el valor de @groupIds
parámetro
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;
He copiado esto de la pregunta duplicada con algunas modificaciones.