SQL Server - ЗАКАЗАТЬ ПО СЛУЧАЮ - PullRequest
0 голосов
/ 28 апреля 2009

У меня следующий запрос выполняется динамически

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] Неверный синтаксис около 'на'.

Ответы [ 6 ]

6 голосов
/ 28 апреля 2009

вы выполняете этот запрос динамически ?, если это так, вам может понадобиться экранировать кавычки вокруг 'na':

SELECT *
FROM Vehicles
WHERE (DKID IN (69954))
ORDER BY case when ImageName1 = ''na'' then 0 else 1 end, Make , Model, Year DESC
1 голос
/ 28 апреля 2009

Вы используете JDBC. Возможно ли преобразование / интерпретация из JDBC? Попробуйте сделать параметр «na». Проверьте, существует ли определенный синтаксис в JDBC для строковых констант в запросах. Я не использую JDBC, поэтому могу ошибаться.

1 голос
/ 28 апреля 2009

у меня работает

вот сценарий репо

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 голосов
/ 29 апреля 2009

Как сказал КМайк, похоже, что вы не сбежали должным образом.

По сути, когда вы выполняли оператор, он не генерировал синтаксически правильный оператор SQL из динамического SQL.

Обычно, когда я пишу динамический sql, я использую оператор print для печати сгенерированного SQL. Затем я могу визуально просмотреть сгенерированный sql на наличие очевидных ошибок, а затем выполнить его, чтобы убедиться, что он работает должным образом.

Если я допустил ошибку в динамическом SQL, это обычно будет показано здесь.

0 голосов
/ 28 апреля 2009

Ваш запрос отлично работает для меня в 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
0 голосов
/ 28 апреля 2009

Попробуйте заключить оператор case в скобки.

SELECT *
FROM Vehicles
WHERE (DKID IN (69954))
ORDER BY 
    (case when ImageName1 = 'na' then 0 else 1 end), Make , Model, Year DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...