【发布时间】:2016-02-17 01:13:00
【问题描述】:
这在 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是一样的
【问题讨论】:
-
我最不喜欢 ColdFusion 的一件事 - 当你升级时,以前可以工作的东西开始坏了。
-
@JamesAMohler - a) 你能在 DSN 中启用调试并检查日志文件以查看传递给数据库的实际 sql 字符串吗?此外,b) 检查 SQL Profiler 以查看 SQL Server 实际尝试执行的语句和 c) 您是否检查了 Scott 提到的空白管理设置?因为您发布的内容对我来说似乎也是有效的,这表明它可能在到达数据库(?)之前以某种方式被更改,如果是这样,日志记录/分析器可能有助于查明该更改是什么。
-
请注意,SQL 字符串位于一行。嗯......好吧,这可以解释语法错误。作为单行,它不再是一个有效的 sql 语句,中间有注释将其分解。我不记得间谍日志是否以任何方式格式化了 sql 字符串。检查 SQL 探查器。这条语句真的是单行执行的,还是它在间谍日志中的显示方式?
-
Bug #4118874 - 副标题:让你的脏手套远离 SQL ;-)
标签: tsql coldfusion cfquery coldfusion-2016