运行 一个 cfquery 代码块内的多个查询
Running multiple queries inside one cfquery code block
数据库:MSSQL 2008
CF 版本:9
<cfquery name="rsData" datasource="#request.dsn#">
SELECT GETDATE() AS CurrentDateTime1
SELECT GETDATE() AS CurrentDateTime2
</cfquery>
<cfoutput query="rsData">
#rsData.CurrentDateTime1#
#rsData.CurrentDateTime2#
</cfoutput>
<cfdump var="#rsData#">
我希望能够输出#rsData.CurrentDateTime2#,但我遇到了一个硬错误:
Element CURRENTDATETIME2 is undefined in rsData
关于为什么的任何想法?是否需要启用 CFAdmin 设置?代码的其他区域也可以正常工作,所以我有点困惑。任何有关在哪里寻找解决此问题的建议将不胜感激。
** 根据 LEIGH 的回答更新,让我返回并查看我的错字 **
这只是我最终尝试做的事情的一个肮脏的例子,可能行不通。
declare @start DATETIME, @end DATETIME
set @start = (
select max(date) DTM
from TABLE)
SET @lowStart_Search = dateadd(year,-1,@highStart_Search)
SELECT COLUMN1, COLUMN2
WHERE column3 <= @start
AND column3 >= @end
There are other areas of the code where this works just fine
这似乎不太可能。其他查询必须有所不同。
这与多个 SQL 语句本身无关,而是这些语句生成了多少结果集。 CFQuery
只能 returning 单个 resultset。上面的 SQL 生成多个结果集:
- 结果集 1:
SELECT GETDATE() AS CurrentDateTime1
- 结果集 2:
SELECT GETDATE() AS CurrentDateTime2
请注意,如果您在 SSMS 中 运行 它会生成两个结果网格,而不是一个?
第一个结果
CurrentDateTime1
------------------
October, 05 2015 16:36:31
(1 row affected)
第二个结果
CurrentDateTime2
------------------
October, 05 2015 16:36:31
(1 row affected)
CFQuery 标签只会 return 第一个结果。其余的将被忽略。因此,为什么 CurrentDateTime2
是未定义的。
如果需要,您当然可以将 SQL 修改为 return 这两个值。例如,return 它们作为单个结果集的两个单独的 列 。
SELECT GETDATE() AS CurrentDateTime1
, GETDATE() AS CurrentDateTime2
还有其他选项,具体取决于最终目标(从简化示例中看不清楚)。然而,再次 cfquery
只会 return 一个结果。如果您确实需要多个结果集,则必须改用 cfstoredproc
。
数据库:MSSQL 2008
CF 版本:9
<cfquery name="rsData" datasource="#request.dsn#">
SELECT GETDATE() AS CurrentDateTime1
SELECT GETDATE() AS CurrentDateTime2
</cfquery>
<cfoutput query="rsData">
#rsData.CurrentDateTime1#
#rsData.CurrentDateTime2#
</cfoutput>
<cfdump var="#rsData#">
我希望能够输出#rsData.CurrentDateTime2#,但我遇到了一个硬错误:
Element CURRENTDATETIME2 is undefined in rsData
关于为什么的任何想法?是否需要启用 CFAdmin 设置?代码的其他区域也可以正常工作,所以我有点困惑。任何有关在哪里寻找解决此问题的建议将不胜感激。
** 根据 LEIGH 的回答更新,让我返回并查看我的错字 ** 这只是我最终尝试做的事情的一个肮脏的例子,可能行不通。
declare @start DATETIME, @end DATETIME
set @start = (
select max(date) DTM
from TABLE)
SET @lowStart_Search = dateadd(year,-1,@highStart_Search)
SELECT COLUMN1, COLUMN2
WHERE column3 <= @start
AND column3 >= @end
There are other areas of the code where this works just fine
这似乎不太可能。其他查询必须有所不同。
这与多个 SQL 语句本身无关,而是这些语句生成了多少结果集。 CFQuery
只能 returning 单个 resultset。上面的 SQL 生成多个结果集:
- 结果集 1:
SELECT GETDATE() AS CurrentDateTime1
- 结果集 2:
SELECT GETDATE() AS CurrentDateTime2
请注意,如果您在 SSMS 中 运行 它会生成两个结果网格,而不是一个?
第一个结果
CurrentDateTime1
------------------
October, 05 2015 16:36:31
(1 row affected)
第二个结果
CurrentDateTime2
------------------
October, 05 2015 16:36:31
(1 row affected)
CFQuery 标签只会 return 第一个结果。其余的将被忽略。因此,为什么 CurrentDateTime2
是未定义的。
如果需要,您当然可以将 SQL 修改为 return 这两个值。例如,return 它们作为单个结果集的两个单独的 列 。
SELECT GETDATE() AS CurrentDateTime1
, GETDATE() AS CurrentDateTime2
还有其他选项,具体取决于最终目标(从简化示例中看不清楚)。然而,再次 cfquery
只会 return 一个结果。如果您确实需要多个结果集,则必须改用 cfstoredproc
。