2009-04-28 22 views
0

Ich habe folgendes die Abfrage dynamischSQL Server- ORDER BY CASE

SELECT * 
FROM Vehicles 
WHERE (DKID IN (69954)) 
ORDER BY case when ImageName1 = 'na' then 0 else 1 end, Make , Model, Year DESC 

läuft Dieses wird folgende Fehlerzurückkehrt:

Error Executing Database Query. [Macromedia][SQLServer JDBC Driver][SQLServer]Incorrect syntax near 'na'.

+0

Die Abfrage sieht gut aus, wird die Abfrage in SqlServer Management Studio ausgeführt? –

+0

Haben Sie die Spalte ImageName1 in Ihrer Tabelle? – Arvo

+0

ImageName1 ist in der Tabelle und wie die Antworten unten besagt, dass es außerhalb seiner dynamischen Form gut ausgeführt wird. – Patcouch22

Antwort

6

werden Sie diese Abfrage dynamisch laufen ?, wenn ja könnte man die Anführungszeichen 'na' entkommen müssen:

SELECT * 
FROM Vehicles 
WHERE (DKID IN (69954)) 
ORDER BY case when ImageName1 = ''na'' then 0 else 1 end, Make , Model, Year DESC 
+0

Ich führe es dynamisch, aber die Escape-Anführungszeichen bieten immer noch den gleichen Fehler. – Patcouch22

+0

versuchen, 'na' mit char (110) + char (97) zu ersetzen, was langsam sein wird, aber helfen wird, es zu diagnostizieren mehr ... –

+0

das erlaubte es zu laufen ... – Patcouch22

0

Versuchen Sie, die case Anweisung in Klammern einschließen.

SELECT * 
FROM Vehicles 
WHERE (DKID IN (69954)) 
ORDER BY 
    (case when ImageName1 = 'na' then 0 else 1 end), Make , Model, Year DESC 
1

Werke für mich

hier ist Repo-Skript

use tempdb 
go 

create table Vehicles(DKID int,ImageName1 varchar(50), 
          Make int, Model int, Year int) 

insert Vehicles values (69954,'na',1,1,2007) 
insert Vehicles values(69954,'bla',1,1,2008) 
go 

SELECT * 
FROM Vehicles 
WHERE (DKID IN (69954)) 
ORDER BY case when ImageName1 = 'na' then 0 else 1 end, 
Make , Model, Year DESC 
0

Ihre Abfrage funktioniert gut für mich in SQL Mgmt Studio ... Vielleicht versuchen Sie es auf diese Weise statt zu sehen, ob es Sie überall hinbringt:

SELECT 
    case when ImageName1 = 'na' then 0 else 1 end as OrderCol, 
    * 
FROM Vehicles 
WHERE (DKID IN (69954)) 
ORDER BY OrderCol,Make,Model,Year DESC 
1

Sie verwenden JDBC. Gibt es wahrscheinlich eine Transformation/Interpretation von JDBC? Versuchen Sie, das "na" zu einem Parameter zu machen. Überprüfen Sie, ob in JDBC eine bestimmte Syntax für Zeichenfolgenkonstanten in Abfragen vorhanden ist. Ich benutze JDBC nicht, also könnte ich völlig falsch liegen.

0

Wie KMike sagte, sieht es so aus, als ob du nicht richtig entkommen bist.

Wenn Sie Ihre Anweisung ausgeführt haben, wurde im Grunde keine syntaktisch korrekte SQL-Anweisung aus dem dynamischen SQL generiert.

Im Allgemeinen, wenn ich dynamisch sql schreibe, verwende ich eine print-Anweisung, um das generierte SQL zu drucken. Ich kann dann das generierte sql visuell auf offensichtliche Fehler überprüfen und es dann ausführen, um sicherzustellen, dass es wie erwartet funktioniert.

Wenn ich im dynamischen SQL einen Fehler gemacht habe, wird es normalerweise hier enthüllt.