Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Passa Elenco di stringhe a una procedura memorizzata

Questo è davvero un duplicato dei link che hai postato. Invece di provare ad analizzare un elenco di valori, passa un parametro con valori di tabella.

Per prima cosa creare il tipo di parametro nel database (solo una volta).

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

Quindi crea una procedura che accetti questo parametro:

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

Sul lato client, crea una DataTable con una singola colonna di tipo int chiamata Id , compilalo con gli ID che desideri, quindi utilizzalo come valore di @groupIds parametro

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;

L'ho copiato dalla domanda duplicata con alcune modifiche.