sql >> Base de Datos >  >> RDS >> Sqlserver

Pasar lista de cadenas a un procedimiento almacenado

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.