sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man analyserar en VARCHAR som skickas till en lagrad procedur i SQL Server?

Om möjligt, använd inte varchar för den här typen av saker, använd en tabell värderad parameter istället.

För att använda en tabellvärdesparameter bör du först deklarera en användardefinierad tabelltyp:

CREATE TYPE IntList As Table
(
    IntValue int
)

Ändra sedan din lagrade procedur för att acceptera denna variabel istället för 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

Problemet är att IN() operatorn förväntar sig en lista med variabler separerade med kommatecken, medan du tillhandahåller en enskild variabel att dess värde är en kommaseparerad sträng.

Om du inte kan använda en tabellvärderad parameter kan du använda en strängdelningsfunktion i sql för att konvertera värdet på varchar till en tabell med ints. det finns många splitters där ute, jag skulle rekommendera att läsa denna artikel innan du väljer en.



  1. TPC-H-prestanda sedan PostgreSQL 8.3

  2. Fel i utvecklingen på Heroku

  3. Hur man får PostgreSQL på en VPS / dedikerad server

  4. Hur man delar data över en organisation