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

Hvordan parses en VARCHAR, der er sendt til en lagret procedure i SQL Server?

Hvis det er muligt, så brug ikke varchar til denne slags ting, brug en tabel værdisat parameter i stedet.

For at bruge en tabelværdiparameter skal du først erklære en brugerdefineret tabeltype:

CREATE TYPE IntList As Table
(
    IntValue int
)

Skift derefter din lagrede procedure til at acceptere denne variabel i stedet for 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 er, at IN() operator forventer en liste over variable adskilt af kommaer, mens du angiver en enkelt variabel, hvis værdi er en kommasepareret streng.

Hvis du ikke kan bruge en tabelværdiparameter, kan du bruge en strengopdelingsfunktion i sql til at konvertere værdien af ​​varchar til en tabel med ints. der er mange splittere derude, jeg vil anbefale at læse denne artikel før du vælger en.



  1. Opret en samlet forbindelse til MySQL i Android

  2. Sådan gemmer du forespørgselsresultat i variabel ved hjælp af mysql

  3. hvordan man beregner intervaller i oracle

  4. Sådan dræber du MySQL-forbindelser