否nvarchar:"操作数数据类型nvarchar对sum运算符"无效。

时间:2015-06-12 18:56:51

标签: sql-server database-design sql-server-2012 inferred-type

我有一个返回ProductNameQty和其他列

的视图

定义为:

SELECT ProductName, Qty, /* etc. */ 
FROM SomeConcreteTable

SomeConcreteTableProductName定义为nvarchar(40),将Qty定义为float

SELECT ProductName, SUM(Qty) 
FROM MyView
GROUP BY ProductName

这会导致错误

  

操作数数据类型nvarchar对sum运算符

无效

当视图没有返回任何行时,修改视图的WHERE条件以便它返回行时没有错误。

SELECT ProductName, SUM(COALESCE(vStarts.LotQty, 0))
FROM MyView
GROUP BY ProductName

无论视图是否返回行,都可以工作。

this post中,Lieven Keersmaekers说在查询中使用匿名类型具有相同的问题,因为不能推断出类型计数。

有道理。

但是,在我的情况下,不应推断类型 - 它们来自表格。

不要问这样一个经常被滥用的问题,但这是一个错误吗?

似乎出乎意料的行为是,当求和对可空浮点(而不是varchar)时,没有行的求和会产生此错误。

Microsoft SQL Server 2012(SP1) - 11.0.3482.0(X64)

4 个答案:

答案 0 :(得分:4)

你应该首先投射你的专栏,它会起作用

SELECT SUM(CAST(Qty as int)) // change to desired type, int for example purposes only

答案 1 :(得分:0)

您的视图定义可能是MyView CAST或CONVERT将数量从FLOAT转换为NVARCHAR。您可能必须将其CAST / CONVERT回到SUM。

答案 2 :(得分:0)

我解决了这个问题,但没找到原因。 在"尝试随机的东西"在故障排除阶段,我在SSMS中打开了视图,并将FROM行更改为使用显式Database.Schema.Table表示法。 即使没有先前要求的COALESCE,也不会再出现错误。 我改回了隐式语法。仍然有效。 :耸耸肩:有什么想法吗?

答案 3 :(得分:-1)

我遇到了同样的问题,解决方案很简单:
总和( 0 +数量)