Cel*_*tas 4 sql t-sql coldfusion
<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>
Run Code Online (Sandbox Code Playgroud)
我想知道这是做什么的.我对循环感到困惑,为什么select语句没有FROM?好吧,他们只是标量.
怎么在循环的外部有一个select语句而在内部有一个select语句呢?我有点不明白union all.为什么有3列被指定(ReasonID,SubReasonID,SurveyID),但是每个列select都给出了2个值?
倾倒:
结构
CACHED:假EXECUTIONTIME:0总记录: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
UNION ALL
SELECT 3,6,245
UNION ALL
SELECT 3,8,245
UNION ALL
SELECT 3,11,245
UNION ALL
SELECT 3,7,245
Bor*_*ort 16
看起来它只是SELECT标量值,而不是任何表中的记录.所以
INSERT INTO myTable
SELECT 'foo'
UNION ALL
SELECT 'bar'
Run Code Online (Sandbox Code Playgroud)
将两条记录插入myTable,foo和bar.
简短的回答是,它不是从表中选择的.所以没有桌子可以FROM来.
如果你执行:
INSERT INTO TableSomething (ColumnA)
SELECT 'A'
UNION ALL
SELECT 'B'
Run Code Online (Sandbox Code Playgroud)
它会将A和B插入ColumnA.
ColdFusion正在创建要插入而不是从表中拉出的数据.