У меня есть мнение, что возвращает ProductName
, Qty
и другие столбцыНет NVARCHAR: "Операнд типа данных NVARCHAR недопустим для оператора суммы"
Определяются как:
SELECT ProductName, Qty, /* etc. */
FROM SomeConcreteTable
SomeConcreteTable
не определяет ProductName
, как nvarchar(40)
и Qty
как float
.
SELECT ProductName, SUM(Qty)
FROM MyView
GROUP BY ProductName
Это приводит к ошибке
Операнда типа данных NVARCHAR недопустим для суммы оператора
Когда вид не возвращает ни одной строки, нет никакой ошибки, когда WHERE
условия По мнению модифицируется так что он возвращает строки.
SELECT ProductName, SUM(COALESCE(vStarts.LotQty, 0))
FROM MyView
GROUP BY ProductName
Работает независимо от того, возвращает ли представление строки.
В this post Ливен Кирсмайерс говорит, что использование анонимного типа в запросе имело ту же проблему, что и число типов не было выведено.
Имеет смысл.
Однако в моем случае типы не следует выводить - они взяты из таблицы.
Не задавать столь часто оскорбленный вопрос, но является ли это ошибкой?
Кажется, что неожиданное поведение, заключающееся в том, что суммирование по никаким строкам не приведет к этой ошибке, когда суммирование происходит против допустимого значения с плавающей запятой (а не varchar).
Microsoft SQL Server 2012 (SP1) - 11.0.3482.0 (X64)
К сожалению, это не так. Я просто создал представление, и это прямой SELECT. Никакое представление не имеет каких-либо изменений или каких-либо других изменений в SELECT, кроме нескольких псевдонимов имен. –
Является ли явное литье Qty обратно в float, чтобы вычислить SUM? –
Когда я явно бросаю плавать, ошибка действительно исчезает.Я ожидаю, что если MSSQL потеряет отслеживание типа данных. Похоже, что данные строки необходимы для получения типа данных и что «VARCHAR» предполагается иначе, даже если тип данных не должен быть выведен. –