Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Предаване на списък от низове към съхранена процедура

Това наистина е дубликат на връзките, които сте публикували. Вместо да се опитвате да анализирате списък със стойности, подайте параметър със стойност на таблица.

Първо създайте типа на параметъра в базата данни (само веднъж).

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

След това създайте процедура, която приема този параметър:

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

От страна на клиента създайте DataTable с една колона с int тип, наречена Id , попълнете го с желаните идентификатори, след което го използвайте като стойност на @groupIds параметър

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;

Копирах това от дублиращия се въпрос с няколко модификации.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използвайки SSDT, как да разреша грешки SQL71561, когато имам изглед, който препраща към обекти в различна база данни?

  2. Номериращи острови в SQL Server 2012

  3. как да променя нивото на изолация?

  4. Закръгляване на десетичен знак в sql сървър

  5. IIF(...) не е разпозната вградена функция