Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak przeanalizować VARCHAR przekazany do procedury składowanej w SQL Server?

Jeśli to możliwe, nie używaj varchar do tego rodzaju rzeczy, użyj tabeli ceniony parametr zamiast tego.

Aby użyć parametru wartości w tabeli, należy najpierw zadeklarować typ tabeli zdefiniowany przez użytkownika:

CREATE TYPE IntList As Table
(
    IntValue int
)

Następnie zmień procedurę składowaną, aby akceptowała tę zmienną zamiast 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

Problem polega na tym, że IN() operator oczekuje listy zmiennych oddzielonych przecinkami, podczas gdy podajesz pojedynczą zmienną, której wartość jest ciągiem oddzielonym przecinkami.

Jeśli nie możesz użyć parametru o wartości tabeli, możesz użyć funkcji dzielenia ciągów w sql, aby przekonwertować wartość varchar na tabelę int. istnieje wiele splitterów, polecam przeczytanie ten artykuł przed wybraniem jednego.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. tracenie wartości null filtrowanie wyników zapytań sql przy użyciu funkcji where

  2. odzyskać miejsce po przeniesieniu indeksów do grupy plików

  3. haszować wiersz SQL?

  4. Procedura składowana jest wykonywana z różnymi indeksami, gdy jest wywoływana za pośrednictwem Entity Framework w porównaniu do SSMS

  5. Dlaczego SQL Server nie traktuje tego kodu w sposób błędny?