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

Declaraciones if anidadas en la instrucción SELECT del procedimiento almacenado de SQL Server

Para esto, intentaría ir con una solución Dynamic SQL más formal, algo como lo siguiente, dados sus parámetros de entrada definidos

DECLARE @SQL VARCHAR(MAX)

SET @SQL = '
SELECT

FROM
     database.dbo.table T
WHERE
     T.deleted = ''n'' '

--Do your conditional stuff here
IF @searchf1 <> '' THEN
    SET @SQL = @SQL + ' AND fieldf1 = ' + @searchf1 + ' AND fieldr1 = ' + @searchr1 + ''' '

--Finish the query
SET @SQL = @SQL + ' ORDER BY xxx'

EXEC(@SQL)

DESCARGO DE RESPONSABILIDAD: El uso de Dynamic SQL NO es algo que deba tomarse a la ligera, y se debe tener la debida consideración en TODAS las circunstancias para garantizar que no esté expuesto a ataques de inyección de SQL; sin embargo, para algunas operaciones de tipo de búsqueda dinámica es uno de los más elegantes. ruta.