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ですか? OK、それらは単なるスカラーです。

ループの外側に 1 つの select ステートメントがあり、ループの内側に 1 つの select ステートメントがあるのはどうですか? 要点がわかりませんunion all。また、3 つの列 (ReasonID、SubReasonID、SurveyID) が指定されているのに、それぞれにselect2 つの値が指定されているのはなぜですか?

ダンプ:

構造体

CACHED: false EXECUTIONTIME: 0 RECORDCOUNT: 8 SQL: INSERT INTO TWelcomeHome_Reason (ReasonID、SubReasonID、SurveyID) SELECT 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どのテーブルからのレコードでもなく、スカラー値を ingしているように見えます。そう

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

myTable に 2 つのレコードを挿入foobarます。

于 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 に答える