0

データベースから結果を取得するためのこのクエリがあります。私の問題はselectedanswer、selectステートメントの一部がからすべてのデータをプルしないことr.textboxmultiです。

以下は私の質問です。

     <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
4

3 に答える 3

2

COALESCEの代わりに使用してみてくださいISNULL。これらは異なるデータ型の優先順位ルールにつながります-私a.answerはそうだと思いvarchar(255)ます。また、最初の引数を明示的に変換することも害にはなりません。

COALESCE(CONVERT(VARCHAR(MAX), a.answer),
  r.textboxmulti, r.other, r.textbox, r.truefalse)
于 2012-09-04T16:52:21.893 に答える
1

「すべてのデータ」とはどういう意味ですか?一部の行でr.textboxmultiからデータをプルしていないことを意味する場合、それはそれらの行でnullであり、その事実がラップされているisnullによってマスクされていることを意味します(ちなみに、合体の使用を検討できます) isnullをネストする代わりに....)

データを取得しているが、一部を残している場合は、データが切り捨てられている可能性があります。これは、SQL Server(またはSQL Serverを監視している処理の次の段階...)が、戻り値を保持するには小さすぎるデータ型と見なした場合に発生する可能性があります。これは、暗黙的な型変換が原因で発生する場合があります。十分な大きさのデータ型に明示的にキャストすることで、これに対処できます。

最後のまれな可能性は、r.textboxmultiにASCIIヌル文字が含まれていることです。多くのプログラム(SQL Serverの印刷コマンド...を含む)は、それをコマンドとして受け取り、後でその文字列からの表示を停止します。これはあまり出てきませんが、私自身が遭遇しました。

于 2012-09-04T16:27:08.010 に答える
0

SQL Server Management Studioには、グリッドまたはテキストビューの列に表示する文字数を指定する設定があります。

アプリケーションでデータを使用する場合。そこにすべてのデータを保存していますか?これは、SSMSのデフォルト設定を使用して255文字のみを表示していることの確かな兆候です。

于 2012-09-04T16:56:51.817 に答える