Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Passar lista de strings para um procedimento armazenado


Esta é realmente uma duplicata dos links que você postou. Em vez de tentar analisar uma lista de valores, passe um parâmetro com valor de tabela.

Primeiro crie o tipo do parâmetro no banco de dados (apenas uma vez).
CREATE TYPE [dbo].[IdList] AS TABLE(
    [Id] int NULL
);

Em seguida, crie um procedimento que aceite 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

No lado do cliente, crie um DataTable com uma única coluna do tipo int chamada Id , preencha-o com os IDs desejados e use-o como o valor do @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;

Copiei isso da pergunta duplicada com algumas modificações.