cfquery падает при наличии комментариев tsql

Это не приводит к сбою в ColdFusion 11, но происходит сбой в ColdFusion 2016.

SELECT  *
FROM    dbo.Roles WITH (NOLOCK)
WHERE   Code IS NOT NULL
AND     Active = 1
AND     RoleID IN (SELECT RoleID FROM dbo.Emp WITH (NOLOCK)) -- It's ok to look at termed employees

введите здесь описание изображения

Это работает нормально в обоих

SELECT  *
FROM    dbo.Roles WITH (NOLOCK)
WHERE   Code IS NOT NULL
AND     Active = 1
AND     RoleID IN (SELECT RoleID FROM dbo.Emp WITH (NOLOCK)) 

Есть ли настройка для восстановления исходного поведения?

ОБНОВЛЕНИЕ

Я думал, что у меня есть минимальный пример проблемы, но это не так. Вот полный запрос

    SELECT '<ul>' + STUFF (
        (
        SELECT  MIN(Role) AS "li/code", Code AS "li/span/b", 'Unsorted' AS "li/span/var"
        FROM    dbo.Roles WITH (NOLOCK)
        WHERE   Code IS NOT NULL
        AND     Active = 1
        AND     RoleID IN (SELECT RoleID FROM dbo.Emp WITH (NOLOCK)) -- It's ok to look at termed employees
        GROUP BY Code
        FOR XML PATH ('')
        ),
        1,0,''

    ) + '</ul>' AS xmlRole

Когда я включаю отладку БД: я получаю:

spy(http-nio-8500-exec-5)(2016/02/17 10:21:13.807)>> OK

spy(http-nio-8500-exec-5)(2016/02/17 10:21:13.807)>> Statement[4].execute(String sql, int autoGeneratedKeys)
spy(http-nio-8500-exec-5)(2016/02/17 10:21:13.807)>> sql = SELECT '<ul>' + STUFF ( ( SELECT MIN(Role) AS "li/code", Code AS "li/span/b", 'Unsorted' AS "li/span/var" FROM dbo.Roles WITH (NOLOCK) WHERE Code IS NOT NULL AND Active = 1 AND RoleID IN (SELECT RoleID FROM dbo.Emp WITH (NOLOCK)) -- It's ok to look at termed employees GROUP BY Code FOR XML PATH ('') ), 1,0,'' ) + '</ul>' AS xmlRole
spy(http-nio-8500-exec-5)(2016/02/17 10:21:13.807)>> autoGeneratedKeys = 1
spy(http-nio-8500-exec-5)(2016/02/17 10:21:13.807)>>    
java.sql.SQLException: [Macromedia][SQLServer JDBC Driver][SQLServer]Incorrect syntax near ')'. ErrorCode=102 SQLState=HY000
java.sql.SQLException: [Macromedia][SQLServer JDBC Driver][SQLServer]Incorrect syntax near ')'.
    at macromedia.jdbc.sqlserverbase.ddcw.b(Unknown Source)
    at macromedia.jdbc.sqlserverbase.ddcw.a(Unknown Source)

Обратите внимание, что строка SQL находится в одной строке. Когда комментарий начинается, он не заканчивается. Все после -- остается закомментированным.

Управление пробелами включено. Отключение не меняет поведение. Сгенерированный SQL тот же


person James A Mohler    schedule 17.02.2016    source источник
comment
Одна из моих наименее любимых вещей в ColdFusion — при обновлении все, что раньше работало, начинает ломаться.   -  person Dan Bracuk    schedule 17.02.2016
comment
*ColdFusoin 10.5 * ColdFusion 10.5.1   -  person Scott Stroz    schedule 17.02.2016
comment
Я уверен, что при обновлении до CF9 с CF8 была такая проблема. Решение этой проблемы включало отключение управления пробелами в админке. Изменится ли это что-нибудь, если вы отключите управление пробелами? В любом случае, определите ошибку.   -  person haxtbh    schedule 17.02.2016
comment
На самом деле вы вставили один и тот же код дважды. Рассмотрите возможность изменения SQL для использования запроса запросов.   -  person PatNowak    schedule 17.02.2016
comment
@PatNowak Я думаю, что это было сделано намеренно. Проблема связана с комментарием -- в первом запросе. Тот же запрос без комментария работает нормально.   -  person haxtbh    schedule 17.02.2016
comment
Возможно, у CF есть проблема с разбором этого комментария, так как правильный комментарий — это синтаксис тега ‹!--- ---›   -  person PatNowak    schedule 17.02.2016
comment
Определенно была проблема с комментариями еще в CF8/9. Любые изменения, если вы переместите комментарий в другое место, кроме конца SQL?   -  person Leigh    schedule 17.02.2016
comment
@PatNowak - Нет, задача CF просто оценить любой CFML и передать сгенерированную строку sql в базу данных для выполнения. Таким образом, он будет игнорировать --. База данных также должна игнорировать его и рассматривать как допустимый комментарий sql.   -  person Leigh    schedule 17.02.2016
comment
@PatNowak SQL отличается. В первом есть комментарий SQL.   -  person James A Mohler    schedule 17.02.2016
comment
@Leigh Он не работает независимо от того, где находится комментарий tsql.   -  person James A Mohler    schedule 17.02.2016
comment
@JamesAMohler - а) Можете ли вы включить отладку в DSN и проверить файл журнала, чтобы увидеть фактическую строку sql, передаваемую в базу данных? Кроме того, б) проверьте с помощью SQL Profiler, какой оператор на самом деле пытается выполнить SQL Server, и в) проверили ли вы настройки управления пробелами, упомянутые Скоттом? Потому что то, что вы опубликовали, тоже кажется мне действительным, предполагая, что, возможно, оно каким-то образом изменяется до того, как оно попадет в базу данных (?), И если это так, ведение журнала/профилировщик может помочь точно определить, что это за изменение.   -  person Leigh    schedule 17.02.2016
comment
Обратите внимание, что строка SQL находится в одной строке. Хм... ну, это как бы объясняет синтаксическую ошибку. Как одна строка, это больше не допустимый оператор sql с комментарием, разбивающим его посередине. Я не помню, форматирует ли шпионский журнал строку sql каким-либо образом. Проверьте профилировщик SQL. Это заявление действительно выполняется одной строкой, или это просто так оно отображается в журнале шпионажа?   -  person Leigh    schedule 17.02.2016
comment
(Редактировать) FWIW, просто скопировал и вставил ваш точный запрос выше и запустил его с помощью CF11. Сгенерированный шпионский журнал sql НЕ состоит из одной строки. Не окончательно, но ... это предполагает, что CF может возиться с ним на пути к базе данных. (Предполагая, что cfquery действительно содержит новые строки, и никакой другой ваш код не изменяет его перед выполнением). SQL Profiler должен подтвердить/опровергнуть. К сожалению, я не веду 2016 год, так что это все, что я могу сказать о том, почему и где.   -  person Leigh    schedule 18.02.2016
comment
Я сообщил об ошибке: bugbase.adobe.com/index.cfm?event=bug&id =4118874   -  person James A Mohler    schedule 18.02.2016
comment
Ошибка № 4118874 — Подзаголовок: Держите свои грязные руки подальше от SQL ;-)   -  person Leigh    schedule 18.02.2016
comment
@JamesAMohler - Поскольку ответ - это ошибка, можете ли вы продвигать свой комментарий к ответу, чтобы он был более заметен для люди, столкнувшиеся с такой же проблемой?   -  person Leigh    schedule 06.05.2016


Ответы (1)


По словам Adobe, добавление обновления 1 решит эту проблему.

Список проблем, исправленных в обновлении 1: https://helpx.adobe.com/coldfusion/kb/bugs-fixed-coldfusion-2016-update-1.html#main-pars_minitoc

Сведения об обновлении 1: https://helpx.adobe.com/coldfusion/kb/coldfusion-2016-update-1.html

person James A Mohler    schedule 10.05.2016