Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Passer la liste des chaînes à une procédure stockée

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.