2009-04-28 109 views
0

我有以下查询动态SQL服务器 - 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 

运行此函数返回以下错误:

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

+0

查询对我来说很好,查询是否在SqlServer Management Studio中运行? – 2009-04-28 12:52:22

+0

你的表格中有ImageName1列吗? – Arvo 2009-04-28 12:53:07

回答

6

你动态地运行此查询?如果是的话,你可能需要围绕逃脱引号“NA”:

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

尝试封闭括号中的case声明。

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

作品对我来说

这里是回购脚本

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

您的查询在我的SQL Mgmt Studio中正常工作......也许试试这种方式,而不是看看它是否让您在任何地方:

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

您正在使用JDBC。 JDBC可能有转换/解释吗?尝试将'na'作为参数。检查JDBC中是否存在针对查询中的字符串常量的特定语法。我不使用JDBC,所以我可能完全错误。

0

正如KMike所说,看起来你并没有正确逃脱。

基本上,当您运行语句时,它不会从动态SQL生成语法上正确的SQL语句。

通常,当我编写动态sql时,我使用print语句来打印生成的SQL。然后,我可以直观地查看生成的SQL以了解明显的错误,然后执行它以确保它按预期工作。

如果我在动态SQL中犯了错误,通常会在这里显示。