4
<CFIF ListLen(SESSION.WHSurveyStruct.reasonString, ";") gt 0>
    <CFQUERY name="insertReasons" datasource="#REQUEST.dsn#">
        INSERT INTO TWelcomeHome_Reason
        (ReasonID, SubReasonID, SurveyID)
        SELECT #sanitize(ListFirst(SESSION.WHSurveyStruct.reasonString, ";"))#, #sanitize(getLatestSurveyID.SurveyID)# 
        <CFLOOP list="#sanitize(ListRest(SESSION.WHSurveyStruct.reasonString, ';'))#" index="thisReason" delimiters=";">
            UNION ALL
            SELECT #sanitize(thisReason)#, #sanitize(getLatestSurveyID.SurveyID)#
        </CFLOOP>

    </CFQUERY>

我试图理解这是做什么的。我对循环感到困惑,为什么 select 语句没有FROM? 好的,它们只是标量。

如何在循环外部有一个 select 语句,而在内部有一个 select 语句呢?我有点不明白这一点union all。为什么指定了 3 列(ReasonID、SubReasonID、SurveyID),但每列select都给出了 2 个值?

倾倒:

结构

缓存:错误执行时间:0 记录计数:8 SQL:插入到 TWelcomeHome_Reason(ReasonID、SubReasonID、SurveyID)选择 6、18、245 UNION ALL SELECT 6、21、245
UNION ALL SELECT 6、24、245 UNION ALL SELECT 3、5、 245 联合全部 选择 3、6、245 联合全部 选择 3、8、245 联合全部 选择 3、11、245 联合全部 选择 3、7、245












4

2 回答 2

16

看起来它只是SELECT标量值,而不是任何表中的记录。所以

INSERT INTO myTable
SELECT 'foo'
UNION ALL
SELECT 'bar'

将在 myTable 中插入两条记录,foo并且bar.

于 2012-07-17T19:18:08.570 回答
7

简短的回答是它不是从表格中选择的。所以没有桌子可供选择FROM

如果你执行:

INSERT INTO TableSomething (ColumnA)
SELECT 'A'
UNION ALL
SELECT 'B'

它将A和B插入ColumnA。

ColdFusion 正在创建要插入的数据,而不是从表中提取数据。

于 2012-07-17T19:18:34.207 回答