查询结果未预期

时间:2010-04-23 04:35:40

标签: sql-server sql-server-2005 coldfusion

我15年来一直是CF开发人员,我从来没有遇到任何奇怪或令人沮丧的事情。我把头发拉了几个小时,用Google搜索,抽象,简化,祈祷并完成所有反向。你能救我吗?

cffunction接受一个字符串参数,并从该字符串构建一个“短语”数组来运行查询,尝试匹配数据库中的位置名称。例如,字符串“巨石共和国”将产生阵列:[“the”,“共和国”,“of”,“boulder”,“共和国”,“共和国”,“巨石共和国” ,“共和国”,“巨石共和国”,“巨石”。

另一个cffunction使用前面提到的cffunction并运行cfquery。基于先前给出的示例的查询将是......

从vwLocationsWithAlias中选择locationid,locationname,locationaliasname,其中LocationName为('the','共和','共和','共和','共和','共和国','of','巨石','巨石')或位置阿里亚斯名称(''','共和国','共和国','共和国','共和国','共和国',''',''巨石' , '巨石')

这会返回2条记录......

locationid - locationname - locationalias

99 - '博尔德' - '共和国'

68 - 'Boulder' - NULL

这很好。工作得很好,花花公子。但是......如果字符串被更改为“共和国”,则会产生短语数组[“the”,“republic”,“the republic”],然后用于生成查询......

从vwLocationsWithAlias中选择locationid,locationname,locationaliasname,其中LocationName in('the','the republic','republic')或LocationAliasName in('the','the republic','republic')

返回0条记录。说什么?!好的,只是为了确保我不是非常不高兴我在SQL控制台中对cf数据源中的同一个数据库运行相同的查询。 1记录!

locationid - locationname - locationalias

99 - '博尔德' - '共和国'

我甚至可以在同一个cffunction中对该sql进行硬编码并获得一个结果,但绝不会从动态生成的SQL中获取。我可以从另一个不同名称的cffunction获取我的位置短语,这些cffunction返回硬编码的数组值并且那些工作,但是如果数组是动态构建的,则永远不会。我已经尝试删除cfqueryparams,三重检查我的数据类型,数据源设置等,等等。没有骰子

WTF!?这是一个不起眼的错误吗?我失去了理智吗?我已经尝试了我能想到的一切,其他人(包括雷·卡姆登)可以想到。

ColdFusion 8(包含所有最新的修补程序) SQL Server 2005(包含所有最好的服务包) Windows 2003 Server(包含所有最新更新,服务包和每晚MS voodoo)

2 个答案:

答案 0 :(得分:2)

在我看来,您的函数生成的查询与您期望的略有不同,尝试在生成查询后在函数中放置断点,复制生成的查询并在sql server中运行它。我预计也不会有任何结果。

可能是某些空格或某些东西导致找不到记录。注意:您正在搜索完全字符串。要搜索 near 字符串,请在查询中使用like

答案 1 :(得分:0)

您使用的是CF 8还是CF 8.01?如果你还没有,请升级到CF 8.01。

您还可以尝试为SQL Server 2005加载不同于内置JDBC驱动程序的JDBC驱动程序。请参阅http://kb2.adobe.com/cps/421/ded4216b.html我建议这样做,因为CF / JRUN与数据库之间的连接似乎是发生问题的层。那篇文章有点旧,所以它可能没有指向最新的SQL Server 05 JDBC驱动程序