Coldfusion: не может ссылаться на var из набора результатов запроса - PullRequest
1 голос
/ 16 июля 2011

Используя cfscript, пытаясь установить идентификатор вновь вставленного вопроса, чтобы я мог использовать его в своем ответном вставке для построения отношений. Я делал это миллион раз за пределами cfscript. setName, кажется, является правильным методом для вызова имени запроса.

Я получаю сообщение об ошибке, что "theQuestionID" не существует в qryQuestion

i = 1; 
while ( structKeyExists( form, "question" & i ) ) 
{

    q = new Query();
    q.setDatasource("kSurvey");
    q.setName("qryQuestion");
    q.setSQL("
              set nocount on 
              insert into question (question) 
              values('#form["question#i#"]#')
              select @@IDENTITY AS theQuestionID
              set NOCOUNT off
              ");
    q.execute();

    writeOutput("Question"&i&"<br>");
    j = 1;
        while ( structKeyExists( form, "question" & i & "_answer" & j) ) {

            q = new Query();
            q.setDatasource("kSurvey");
            q.setSQL("
                      insert into answer (answer,questionid) 
                      values('#form["question#i#_answer#j#"]#',#qryQuestion.theQuestionID#)
                      ");
            q.execute();

            writeOutput("Answer"&j&"<br>");
            j++;
        }

i++; 
}

1 Ответ

3 голосов
/ 19 июля 2011

Есть лучший способ сделать это, не выбирая @@ identity (что само по себе не лучший способ получить его с сервера sql, использование scope_identity - лучший способ сделать это на сервере sql. http://msdn.microsoft.com/en-us/library/ms190315.aspx

К счастью, ColdFusion делает это еще проще:

<cfscript>
    insertQuery = new query();

    insertQuery.setDatasource("datasourcename");

    insertQuery.setSql("insert into contact(firstname, lastname) 
           values('ryan','anklam')");

    result = insertQuery.Execute();

    theKey = result.getPrefix().generatedkey;
 </cfscript>
...