sql >> Database >  >> RDS >> Sqlserver

Hoe ontleden een VARCHAR doorgegeven aan een opgeslagen procedure in SQL Server?

Gebruik indien mogelijk varchar niet voor dit soort dingen, gebruik een tabel gewaardeerde parameter in plaats daarvan.

Om een ​​tabelwaardeparameter te gebruiken, moet u eerst een door de gebruiker gedefinieerd tabeltype declareren:

CREATE TYPE IntList As Table
(
    IntValue int
)

Wijzig vervolgens uw opgeslagen procedure om deze variabele te accepteren in plaats van de 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

Het probleem is dat de IN() operator verwacht een lijst met variabelen gescheiden door komma's, terwijl u een enkele variabele opgeeft waarvan de waarde een door komma's gescheiden tekenreeks is.

Als u geen parameter met tabelwaarde kunt gebruiken, kunt u een tekenreekssplitsingsfunctie in sql gebruiken om de waarde van de varchar om te zetten in een tabel met ints. er zijn veel splitters, ik zou aanraden om dit artikel te lezen voordat je er een kiest.



  1. Kolom automatisch verhogen terugzetten naar 0 dagelijks

  2. Omgaan met primaire sleutelconflicten bij het invoegen van gegevens in SQLite

  3. Android-programma om de SQLite-database naar Excel te converteren

  4. MySQL Op zoek naar gratis kamers in reserveringssysteem