Kei*_*ito 3 sql coldfusion sql-server-2008
我得到了一些涉及数据库查询的奇怪行为,这是我以前从未见过的,我希望你可以阐明这个问题.
我有一个名为myTable的数据表和一些列; 到目前为止,涉及它的一切都很好.现在,我刚刚添加了一个名为subTitle的列; 和II注意到,SELECT *为给定记录提取数据的查询不知道该列(它表示返回的查询没有subTitle列),但如果我明确地命名该列(选择subTitle)则为.我想也许Coldfusion服务器可能正在缓存查询,所以我试着解决cachedwithin="#CreateTimeSpan(0, 0, 0, 0)#" 但没有骰子.
考虑以下代码:
<cfquery name="getSub" datasource="#Application.datasourceName#">
SELECT subTitle
FROM myTable
WHERE RecordID = '674'
</cfquery>
<cfoutput>#getSub.subTitle#</cfoutput>
<cfquery name="getInfo" datasource="#Application.datasourceName#">
SELECT *
FROM myTable
WHERE RecordID = '674'
</cfquery>
<cfoutput>#getInfo.subTitle#</cfoutput>
Run Code Online (Sandbox Code Playgroud)
请记住,记录674在其子标题栏中有字符串"test",大概是上面的
测试
[[崩溃错误]]
这对我没有意义,除非SQL Server 2008以某种方式缓存了SELECT*查询与表的前一个版本,但奇怪的是如果我在SQL Management Studio中运行查询没有问题,它显示选择*的所有列
坦率地说,这个令我感到困惑; 我知道我可以通过显式命名select查询中的所有所需列而不是使用*来解决这个问题(这无论如何都是最佳实践),但我想了解为什么会发生这种情况.
我已经使用SQL Server 2005多年了,从来没有这样的事情发生过,这让我相信它可能涉及SQL Server 2008中的一些新东西; 但是再一次,查询在管理工作室内工作正常的事实也没有与之相提并论.
=== UPDATE ===
清除CF管理员中的模板缓存将解决该问题
是的,ColdFusion缓存<cfquery>SQL字符串.如果基础表结构发生更改,则结果可能是您看到的异常.
变通办法: