2016-11-07 3 views
0

Hallo i-Filter in meiner SQL-Prozedur wie diese:IIF in dynamischen, wo Bedingung für Filter in SQL

IF (@LastLoginStartDate IS NOT NULL) 
    BEGIN 
     SET @sqlFilters = @sqlFilters + 'AND IIF(DPL.[LastLoginDate]=''0001-01-01 00:00:00.0000000'',''1901-01-01 00:00:00.0000000'',DPL.[LastLoginDate]) >= @LastLoginStartDateUTC '; 
    END 

Aber das gibt mir einen Fehler. Wie kann ich den Wert 1901-01-01 für den Wert 0001-01-01 setzen und mit dem Parameter @LastLoginStartDateUTC vergleichen?

Fehler I erhalten:

Msg 102, Level 15, State 1, Line 115 
Incorrect syntax near 'IIF'. 
+0

Markieren Sie die DBMS, die Sie verwenden. (Dieser Code ist weit von ANSI SQL ...) – jarlh

+3

Und zeigen Sie die Zeile * wo * der Fehler auftritt. Diese Zeile sieht vernünftig aus, also verdoppele ich den Fehler dort. –

+1

Dieser Code löst ganz andere Fehler aus. Sie sollten einen Code posten, der Ihren Fehler reproduziert. Ich nehme an, Sie haben einige verrückte dynamische SQL und Sie haben ein zu wenig oder zu viele Symbole. Oder ... Ihre Kompatibilitätsstufe ist möglicherweise nicht SQL 2012. Führen Sie Folgendes aus, um Folgendes herauszufinden: 'SELECT name, compatibility_level FROM sys.databases'. Für 2012 (um 'IIF' zu verwenden) sollte Ihre Datenbank 110 oder höher sein. –

Antwort

2

Iif in Access verwendet wird, ist aber nicht gültig SQL Server. Stattdessen sollten Sie die CASE-Syntax wie folgt verwenden:

AND CASE WHEN DPL.[LastLoginDate]='0001-01-01 00:00:00.0000000' 
     THEN '1901-01-01 00:00:00.0000000 ' 
     ELSE DPL.[LastLoginDate] 
    END >= @LastLoginStartDateUTC 
+0

'IIF' ist SQL Server seit 2012 gültig. Es wird als Kurzschrift für die 'CASE WHEN'-Szenarien behandelt und kommt mit allen Einschränkungen' CASE WHEN' hat. https://msdn.microsoft.com/en-us/library/hh213574.aspx – Jens

+1

Wenn dies wirklich Ihr Problem gelöst hat, dann müssen Sie einen weiteren Schritt und verstehen warum. Entweder haben Sie die falsche Version angegeben oder Ihr Kompatibilitätsgrad ist nicht korrekt. –