当存在T-SQL注释时,CFQUERY会崩溃

8
这段代码在 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

enter image description here

这在两种情况下都可以正常工作

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是相同的。

4
我最不喜欢 ColdFusion 的一件事情是,当你升级后,曾经可用的功能会开始出现问题。 - Dan Bracuk
1
@JamesAMohler - a) 你能在DSN中启用调试并检查日志文件以查看传递给数据库的实际SQL字符串吗?另外,b) 使用SQL Profiler检查SQL Server实际尝试执行的语句,c) 你是否检查了Scott提到的空格管理设置?因为你发布的内容对我来说看起来也是有效的,这可能意味着它在到达数据库之前被某种方式更改了(?),如果是这样,记录/Profiler可以帮助确定这种变化是什么。 - Leigh
1
请注意,SQL字符串在单行上。嗯...这有点解释了语法错误的原因。作为单行,它不再是一个有效的SQL语句,因为注释将其分成两部分。我不记得间谍日志以任何方式格式化SQL字符串。请检查SQL Profiler。该语句是否真的作为单行执行,还是只是在间谍日志中看起来是这样? - Leigh
1
我提交了一个错误报告:https://bugbase.adobe.com/index.cfm?event=bug&id=4118874 - James A Mohler
1
错误 #4118874 - 副标题:不要动SQL ;-) - Leigh
显示剩余11条评论
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接