查询结果与SQL Mgmt和CFQuery不同

时间:2010-04-20 17:27:24

标签: sql-server coldfusion

在SQL管理工作室中执行以下查询提供结果,而不是通过cfquery ...

select distinct locationid, locationname, locationaliasname
from vwLocationsWithAlias
where 1 = 0
or (LocationName = N'the' or LocationAliasName = N'the')
or (LocationName = N'the republic' or LocationAliasName = N'the republic')

预期结果从SQL Mgmt Studio返回,但CFQuery没有返回任何内容。 WTF!?

7 个答案:

答案 0 :(得分:2)

从Coldfusion发送查询时运行Profiler,看看它是否正在发送您期望的内容。

答案 1 :(得分:0)

我假设你的字符串约束有你的TransactSQL Unicode指标(“N”)。我怀疑CF中的SQL解析器不明白。

CF会抛出错误,还是不返回任何行?

sql server的Datasource控件中有一个设置,它告诉DB是unicode:

http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=datasources_ADV_MJS_11.html

答案 2 :(得分:0)

你确定它击中了正确的数据库(不是开发数据库):)

答案 3 :(得分:0)

尝试在包含撇号的部分周围使用preserveSingleQuotes。

答案 4 :(得分:0)

我是否还可以建议不要使用distinct,因为它比在大型数据集上使用“group by”慢很多

答案 5 :(得分:0)

除非您的字段是nvarchar与varchar,否则为什么不取出N'the',只需在where子句中使用'the'或您想要的任何数据。

您还可以检查视图的权限,以确保您通过数据源使用的coldfusion用户设置为从该视图中进行选择。

这是coldfusion查询和查询分析器查询之间的另一个区别,它可以使用不同的用户凭据。

祝你好运。

答案 6 :(得分:0)

SSMS和CFQuery是否可能有不同的“SET”或其他每个连接选项?其中一些可能会影响结果。

如果在启动SQL事件探查器跟踪时可以捕获连接打开,则在突出显示“现有连接”行时可以看到一堆连接选项。 (即使你没有把它们打开,我也不得不假设你在建立连接时能够看到它们,不久之后......)或者,你可以得到cfquery到SELECT @@OPTIONSSELECT SESSIONATTRIBUTE(...)

我承认,鉴于所有可能的连接选项都没有仔细考虑您的查询以获得强有力的假设 - 这只是一个可能的线索。