Come passare un array di valori a una store procedure
Capita spesso di dover passare una serie di valori a una store procedure T-SQL, da SQL Server 2016 è possibile farlo in questo modo
Ovvero passando una stringa contenente degli identificativi separati da virgola che poi tramite la funzione T-SQL STRING_SPLIT vengono trasformati in tabella.
T-SQL: Store con STRING_SPLIT
CREATE PROCEDURE SpuGetResultByListId
@listID nvarchar(MAX), -- lista valori separati da virgola
@Separator varchar(1) = ',' -- separatore predefinito
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM [MSSql108718].[TbPages]
WHERE ID in (
SELECT value
FROM STRING_SPLIT(@listID, @Separator)
);
END
Il separatore va scelto con cura.
Se si tratta di identificatori numerici o Guid, la virgola va benissimo.
Ma se il separatore è di tipo stringa, bisogna assicurarsi che il carattere scelto come separatore non possa mai comparire nella stringa in input.
che può essere richiamata in questo modoSe si tratta di identificatori numerici o Guid, la virgola va benissimo.
Ma se il separatore è di tipo stringa, bisogna assicurarsi che il carattere scelto come separatore non possa mai comparire nella stringa in input.
T-SQL: Esecuzione store
DECLARE @listID nvarchar(MAX) = '000E1D25-67EB-4456-8C52-BE1E723176B4,EDA4D28D-6141-4111-9D98-5EAAA5C654CE,2B19491D-3387-4760-815F-CCE506773CC'
DECLARE @Separator varchar(1) = ','
exec SpuGetResultByListId @listID, @Separator
Il separatore può essere composto solo da 1 carattere.