Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Przekaż listę ciągów do procedury składowanej

To naprawdę duplikat zamieszczonych przez Ciebie linków. Zamiast próbować analizować listę wartości, przekaż parametr z wartością tabeli.

Najpierw utwórz typ parametru w bazie danych (tylko raz).

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

Następnie utwórz procedurę, która akceptuje ten parametr:

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

Po stronie klienta utwórz DataTable z pojedynczą kolumną typu int o nazwie Id , wypełnij go żądanymi identyfikatorami, a następnie użyj go jako wartości @groupIds parametr

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;

Skopiowałem to ze zduplikowanego pytania z kilkoma modyfikacjami.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można znaleźć kolumny „dbo”, funkcji zdefiniowanej przez użytkownika lub agregatu „dbo.FN_Split” lub nazwa jest niejednoznaczna

  2. Porównaj kolumny, w których jedna jest podobna do części drugiej

  3. <> a NIE W

  4. Korzystanie z wyszukiwania pełnotekstowego w celu znalezienia częściowych słów (SQL Server 2008)

  5. Automatyczny przyrost klucza podstawowego w SQL Server Management Studio 2012