sql >> Databasteknik >  >> RDS >> Sqlserver

Skicka lista över strängar till en lagrad procedur

Detta är verkligen en dubblett av länkarna du lagt upp. Istället för att försöka analysera en lista med värden skickar du en tabellvärderad parameter.

Skapa först parameterns typ i databasen (endast en gång).

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

Skapa sedan en procedur som accepterar denna 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 sida, skapa en DataTable med en enda int-typad kolumn som heter Id , fyll det med de ID:n du vill använda och använd det sedan som värdet för @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;

Jag har kopierat detta från dubblettfrågan med några ändringar.



  1. ORA-01756:citerad sträng avslutas inte korrekt när jag försöker köra min kod

  2. Är det möjligt att optimera frågan med hjälp av EXISTS istället för IN-satsen med DISTINCT

  3. Hur använder man en PostgreSQL-behållare med befintliga data?

  4. Hur man uppdaterar kolumn med nullvärde