Select-statement zieht nicht alle data aus einem Feld – SQL server 2008 R2

Ich habe diese Abfrage, um Ergebnisse aus meiner database zu bekommen. Mein Problem ist, dass der selectedanswer Teil der select-statement nicht alle data aus r.textboxmulti .

Unten ist meine Frage.

  <cfquery name="fullResults" datasource="#variables.dsn#"> select s.id, s.name surveyname, q.question, subq.answer subquestion, isnull(isnull(isnull(isnull(a.answer, **r.textboxmulti**),r.other),r.textbox),r.truefalse) as **selectedanswer**, a.*, r.* from results r join questions q on r.questionidfk = q.id left join answers subq on r.itemidfk = subq.id left join answers a on r.answeridfk = a.id join surveys s on q.surveyidfk = s.id where owneridfk = <cfqueryparam value="#arguments.ownerid#" cfsqltype="CF_SQL_VARCHAR" maxlength="35"> order by s.id, owneridfk, q.rank, subq.rank desc </cfquery 

Könnten Sie erklären, was Sie mit "allen data" meinen? Wenn du meinst, dass es keine data von r.textboxmulti für einige Zeilen zieht, bedeutet das, dass es für diese Zeilen null ist und diese Tatsache wird von den Isnulls maskiert, die du in sie eingewickelt hast (übrigens könntest du eine Verschmelzung in Erwägung ziehen anstatt naging isnull ….)

Wenn du meinst, dass es data bekommt, sondern etwas davon verlässt, dann ist eine Möglichkeit, dass es abgeschnitten wird. Dies kann passieren, wenn SQL server (oder die nächste Stufe der Verarbeitung, wo Sie es veiwing …) sieht es als datatyp, der zu klein ist, um den Rückgabewert zu halten, kann dies manchmal aufgrund von impliziten Typ Conversions passieren. Sie können damit umgehen, indem Sie explizit auf einen ausreichend großen datatyp klicken.

Eine endgültige, seltene Möglichkeit ist, dass r.textboxmulti einen ascii null Charakter enthält. Viele Programme (einschließlich der SQL server-printing-Befehl …) nehmen, dass als Befehl zu stoppen Anzeige von etwas von dieser characterfolge danach. Das kommt nicht oft vor, aber ich habe es selbst angetroffen.

Versuchen Sie, COALESCE anstelle von ISNULL . Diese führen zu unterschiedlichen datatypen Vorrang Regeln – ich vermute, a.answer ist varchar(255) . Auch kann nicht schaden, um explizit das erste Argument zu konvertieren:

 COALESCE(CONVERT(VARCHAR(MAX), a.answer), r.textboxmulti, r.other, r.textbox, r.truefalse) 

In SQL server Management Studio gibt es eine Einstellung, die es sagt, wie viele character für eine Spalte im Raster oder in der Textansicht zu zeigen.

Wenn du die data in einer Anwendung verwenden wirst? Siehst du alle data dort? Das ist ein sicheres character, dass Sie die Standardeinstellung in SSMS verwenden, um nur 255 character anzuzeigen.