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

Send liste over strenge til en lagret procedure

Dette er virkelig en kopi af de links, du har postet. I stedet for at forsøge at parse en liste med værdier, skal du sende en parameter med tabelværdi.

Opret først parameterens type i databasen (kun én gang).

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

Opret derefter en procedure, der accepterer denne parameter:

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

På klientens side skal du oprette en datatabel med en enkelt int-type kolonne kaldet Id , udfyld det med de ID'er, du ønsker, og brug det derefter som værdien af ​​@groupIds parameter

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;

Jeg har kopieret dette fra det duplikerede spørgsmål med nogle få ændringer.



  1. Sådan tilføjer du kombinerede unikke felters valideringsregel i Laravel 4

  2. Oracle.ManagedDataAccess løser ikke alias i forbindelsesstrengen

  3. hvordan løses deadlock problem?

  4. Kører PostgreSQL nogle ydelsesoptimeringer for skrivebeskyttede transaktioner