Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie analysiert man einen VARCHAR, der an eine gespeicherte Prozedur in SQL Server übergeben wird?

Verwenden Sie nach Möglichkeit nicht varchar für solche Dinge, sondern eine Tabelle Wertparameter stattdessen.

Um einen Tabellenwertparameter zu verwenden, sollten Sie zuerst einen benutzerdefinierten Tabellentyp deklarieren:

CREATE TYPE IntList As Table
(
    IntValue int
)

Ändern Sie dann Ihre gespeicherte Prozedur so, dass sie diese Variable anstelle von nvarchar akzeptiert:

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

Das Problem ist, dass IN() Der Operator erwartet eine Liste von Variablen, die durch Kommas getrennt sind, während Sie eine einzelne Variable angeben, deren Wert eine durch Kommas getrennte Zeichenfolge ist.

Wenn Sie keinen Tabellenwertparameter verwenden können, können Sie eine Zeichenfolgenaufteilungsfunktion in SQL verwenden, um den Wert des Varchar in eine Tabelle mit Ganzzahlen zu konvertieren. Es gibt viele Splitter, ich würde empfehlen, diesen Artikel bevor Sie einen auswählen.