sql >> Databáze >  >> RDS >> Sqlserver

Jak analyzovat VARCHAR předaný do uložené procedury v SQL Server?

Pokud je to možné, nepoužívejte pro tento druh věcí varchar, použijte tabulku hodnotný parametr místo toho.

Chcete-li použít parametr tabulky hodnoty, měli byste nejprve deklarovat uživatelsky definovaný typ tabulky:

CREATE TYPE IntList As Table
(
    IntValue int
)

Potom změňte uloženou proceduru tak, aby přijímala tuto proměnnou namísto 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

Problém je v tom, že IN() Operátor očekává seznam proměnných oddělených čárkami, zatímco vy zadáte jednu proměnnou, jejíž hodnotou je řetězec oddělený čárkami.

Pokud nemůžete použít parametr s hodnotou tabulky, můžete použít funkci rozdělení řetězce v sql k převodu hodnoty varchar na tabulku ints. existuje mnoho splitterů, doporučuji přečíst tento článek před výběrem jednoho.



  1. Existují potíže s přidáním nového ID (automatický přírůstek) za tabulku

  2. Výjimka Io:Chyba Oracle ORA-12650 po upgradu Oracle na 12g

  3. PostgreSQL:převeďte hexadecimální řetězec velmi velkého čísla na NUMERICKÝ

  4. Pomalý dotaz na zobrazení UNION ALL