Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Verschachtelte if-Anweisungen in der SELECT-Anweisung der gespeicherten Prozedur von SQL Server

Dafür würde ich versuchen, eine formellere dynamische SQL-Lösung zu verwenden, etwa die folgende, wenn Sie Ihre definierten Eingabeparameter angeben

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)

HAFTUNGSAUSSCHLUSS: Die Verwendung von dynamischem SQL sollte NICHT auf die leichte Schulter genommen werden, und es sollte unter ALLEN Umständen angemessen berücksichtigt werden, um sicherzustellen, dass Sie nicht für SQL-Injection-Angriffe anfällig sind. Für einige dynamische Suchvorgänge ist dies jedoch eine der elegantesten Strecke.