Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come analizzare un VARCHAR passato a una stored procedure in SQL Server?

Se possibile, non usare varchar per questo genere di cose, usa una tabella parametro di valore invece.

Per utilizzare un parametro tabled value devi prima dichiarare un tipo di tabella definito dall'utente:

CREATE TYPE IntList As Table
(
    IntValue int
)

Quindi cambia la tua procedura memorizzata per accettare questa variabile invece di nvarchar:

create proc Sp_ReturnPrdoucts
    @BrandIds dbo.IntList readonly -- Note: readonly is a must!
AS
BEGIN

SELECT * 
FROM tbl_Products as p 
join tbl_Brands b on p.ProductBrandId=b.BrandId 
join @BrandIds ON(b.BrandId = IntValue)

END

Il problema è che IN() l'operatore si aspetta un elenco di variabili separate da virgole, mentre tu fornisci una singola variabile il cui valore è una stringa separata da virgole.

Se non è possibile utilizzare un parametro con valori di tabella, è possibile utilizzare una funzione di suddivisione delle stringhe in sql per convertire il valore di varchar in una tabella di ints. ci sono molti splitter là fuori, consiglierei di leggere questo articolo prima di sceglierne uno.