我有以下动态运行的查询
SELECT *
FROM Vehicles
WHERE (DKID IN (69954))
ORDER BY case when ImageName1 = 'na' then 0 else 1 end, Make , Model, Year DESC
这会返回以下错误:
执行数据库查询时出错。 [Macromedia] [SQLServer JDBC 驱动程序] [SQLServer]语法不正确 靠近'na'。
答案 0 :(得分:6)
您是否动态运行此查询?如果是这样,您可能需要转义'na'周围的引号:
SELECT *
FROM Vehicles
WHERE (DKID IN (69954))
ORDER BY case when ImageName1 = ''na'' then 0 else 1 end, Make , Model, Year DESC
答案 1 :(得分:1)
适合我
这里是repo脚本
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
答案 2 :(得分:1)
您正在使用JDBC。可能是JDBC的转换/解释吗?尝试将'na'作为参数。检查JDBC中是否存在查询中字符串常量的特定语法。我不使用JDBC,所以我可能完全错了。
答案 3 :(得分:0)
尝试将case
语句括在括号中。
SELECT *
FROM Vehicles
WHERE (DKID IN (69954))
ORDER BY
(case when ImageName1 = 'na' then 0 else 1 end), Make , Model, Year DESC
答案 4 :(得分: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
答案 5 :(得分:0)
正如KMike所说,看起来你没有正确逃脱。
基本上,当您运行语句时,它不会从动态SQL生成语法正确的SQL语句。
通常,当我编写动态sql时,我使用print语句来打印生成的SQL。然后我可以直观地查看生成的sql是否有明显的错误,然后执行它以确保它按预期工作。
如果我在动态SQL中犯了错误,通常会在此处显示。