/ / Jak deklarować tablicę liczb całkowitych w procedurze przechowywanej programu SQL Server? - sql-server, framework-entity, procedury przechowywane

Jak deklarować tablicę liczb całkowitych w procedurze przechowywanej programu SQL Server? - sql-server, framework-entity, procedury przechowywane

Używam programu SQL Server 2012.

Mam tę tablicę int []:

int[] arr = [1,23,4,3];

arr zmienna I wysłana jako parametr do procedury przechowywanej.

Jak zadeklarować tę zmienną? Jak deklarować tablicę liczb całkowitych w procedurze przechowywanej programu SQL Server?

Odpowiedzi:

2 dla odpowiedzi № 1

SQL Server nie ma żadnego typu "tablicowego" - jeśli potrzebujesz wielu wartości czegoś, to jest tylko jeden konstrukt: a stół.

Jeśli musisz przekazać wiele wartości do procedury przechowywanej, powinieneś wyrejestrować się parametry o wartości tabelarycznej (TVP). Umożliwiają one wysłanie "zmiennej tabeli" pełnej wartości.

To samo dotyczy wewnątrz procedury przechowywanej - jeśli potrzebujesz obsługiwać wiele wartości, użyj zmiennej tabeli (@MyTable) lub "zwykły" tabela tymczasowa (#MyTempTable)


1 dla odpowiedzi nr 2

Jak wspomniano powyżej, SQL Server nie obsługuje tablic, jednak zrobi to dowolna funkcja Split / Parse

EDYTUJ, aby uwzględnić w WHERE

Declare @String varchar(max) ="1,23,4,3"

Select *
From  Clients
Where Clients.Id IN ( Select RetVal from [dbo].[udf-Str-Parse](@String,","))

UDF w razie potrzeby

CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimiter varchar(10))
Returns Table
As
Return (
Select RetSeq = Row_Number() over (Order By (Select null))
,RetVal = LTrim(RTrim(B.i.value("(./text())[1]", "varchar(max)")))
From (Select x = Cast("<x>"+ Replace(@String,@Delimiter,"</x><x>")+"</x>" as xml).query(".")) as A
Cross Apply x.nodes("x") AS B(i)
);
--Select * from [dbo].[udf-Str-Parse]("Dog,Cat,House,Car",",")