sql - 更改 ORDER BY 会导致 "error converting data type"

标签 sql sql-server stored-procedures

我想写序言,这不是我写的。我今天早些时候继承了它,我一直在努力寻找解决方案。下面的代码库有效 - 除了每平方英尺成本以 Alpha 顺序而不是数字返回。

SELECT 
  CTE.Suite, CTE.Building, CS.Address, CS.City, CS.State, CTE.Tenant,
  CTE.AverageCharges, CTE.SQFT, CTE.CostSQFT, CTE.TenantType
FROM cteInvoices as CTE
   ...
ORDER BY 
  CASE @Order
       WHEN 'Suite' THEN CTE.Suite
       WHEN 'Cost' THEN cast(CTE.costSQFT as varchar)
  END

我将最终情况更改为以下内容:

 ORDER BY 
  CASE @Order
       WHEN 'Suite' THEN CTE.Suite
       WHEN 'Cost' THEN CTE.costSQFT
   END

这修复了成本排序,但是,当我选择按套件排序时,我得到:

  Msg 8114, Level 16, State 5, Procedure rCostSQFTcsort, Line 17
  Error converting data type varchar to numeric.

我整个晚上都在研究这个问题,但我似乎没有做任何事情来解决这个问题——如果有的话,它会让事情变得更糟。我希望第二双眼睛可以阐明这个问题。

最佳答案

如果它们不能转换为相同类型,您可能需要将它们分成两个单独的子句。原因是 CASE 是一个返回单一数据类型值的表达式,并且所有潜在选项呈现的数据类型必须是可转换的。如果没有 ELSE 则返回 NULL,因此它将对该“分支”的所有行进行相同的排序:

 ORDER BY 
  CASE @Order
       WHEN 'Suite' THEN CTE.Suite END,
  CASE @Order
       WHEN 'Cost' THEN CTE.costSQFT END;

您可能可以显式转换其中之一,但这可能会改变其含义(例如,您可能仍然希望 11.0之后 9.0 进行排序,并且将两者都转换为字符串不会这样做。

关于sql - 更改 ORDER BY 会导致 "error converting data type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12504118/

相关文章:

sql - 您什么时候会 INNER JOIN LEFT JOINed 表/

php - 学生每篇论文分数的数据库设计

java - 使用什么方法转义所有可转义字符

mysql - 使用 Workbench 迁移向导通过 ssh 将 MS SQL Server 数据库迁移到 MySQL

sql-server - 检查记录是否存在,如果是,则“更新”,如果不是,则“插入”

mysql - 存储过程更新MYSQL中的单引号

c# - 在 asp.net 中传递数据列表值(已关闭)

c# - 确保此代码文件中定义的类与 'inherits' 属性匹配

c# - 检查列是否允许空值,C#?

sql - 另一个内部的 EXEC 存储过程不等待完成