sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo analizar un VARCHAR pasado a un procedimiento almacenado en SQL Server?

Si es posible, no use varchar para este tipo de cosas, use una tabla parámetro valorado en su lugar.

Para usar un parámetro de valor tabulado, primero debe declarar un tipo de tabla definido por el usuario:

CREATE TYPE IntList As Table
(
    IntValue int
)

Luego cambie su procedimiento almacenado para aceptar esta variable en lugar 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

El problema es que el IN() El operador espera una lista de variables separadas por comas, mientras que proporciona una sola variable cuyo valor es una cadena separada por comas.

Si no puede usar un parámetro con valores de tabla, puede usar una función de división de cadenas en sql para convertir el valor de varchar en una tabla de enteros. hay muchos divisores, recomendaría leer este artículo antes de elegir uno.