0

我有这个查询来从我的数据库中获取结果。我的问题是selectedanswerselect 语句的一部分并没有从中提取所有数据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.answervarchar(255). 显式转换第一个参数也无妨:

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

你能解释一下“所有数据”是什么意思吗?如果您的意思是它没有从 r.textboxmulti 提取某些行的数据,这意味着这些行的数据为空,并且该事实被您包裹的 isnulls 所掩盖(顺便说一下,您可以考虑使用合并而不是嵌套 isnull ....)

如果您的意思是它正在获取数据但保留了一些数据,那么一种可能性是它正在被截断。如果 SQL Server(或您正在查看它的下一个处理阶段......)将其视为太小而无法保存返回值的数据类型,则可能会发生这种情况,这有时可能是由于隐式类型转换而发生的。您可以通过显式转换为足够大的数据类型来解决这个问题。

最后一种罕见的可能性是 r.textboxmulti 包含一个 ascii 空字符。许多程序(包括 SQL Server 打印命令...)将其作为一个命令,以在之后停止显示该字符串中的任何内容。这种情况不常出现,但我自己也遇到过。

于 2012-09-04T16:27:08.010 回答
0

在 SQL Server 管理工作室中,有一个设置告诉它在网格或文本视图中为一列显示多少个字符。

如果您要在应用程序中使用数据;你在那里看到所有的数据吗?这肯定表明您使用 SSMS 中的默认设置仅显示 255 个字符。

于 2012-09-04T16:56:51.817 回答