У меня странное поведение, связанное с запросами к базе данных, которого я никогда раньше не видел, и я надеюсь, что вы сможете осветить эту проблему.
У меня есть таблица данных с именем myTable с несколькими столбцами; пока все, что с этим связано, было в порядке. Теперь я только что добавил столбец с именем subTitle; и я замечаю, что 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>
Имея в виду, что запись 674 содержит строку «test» в столбце подзаголовка, примерное значение выше
тест
[[CRASH WITH ERROR]]
Это не имеет смысла для меня, если SQL Server 2008 каким-то образом не кэшировал запрос SELECT * с предыдущим воплощением таблицы, но странно то, что если я запускаю запрос прямо из SQL Management Studio, проблем не возникает и он показывает все столбцы с выбором *
Честно говоря, этот сбил меня с толку; Я знаю, что могу обойти это, явно назвав все нужные столбцы в запросе выбора вместо использования * (что в любом случае является наилучшей практикой), но я хочу понять, почему это происходит.
Я работал с SQL Server 2005 много лет и никогда не случалось ничего подобного, что наводит меня на мысль, что в SQL Server 2008 может быть что-то новое; но с другой стороны, тот факт, что запрос отлично работает внутри управленческой студии, тоже не с этим связан.
=== UPDATE ===
Очистка кэша шаблонов в администраторе CF решит проблему