Cannot update the view or function "%.*ls" because it contains aggregates or a DISTINCT clause.

Error Message:
Msg 4403, Level 16, State 1, Line 1
Cannot update the view or function “%.*ls” because it contains aggregates or a DISTINCT clause.

Severity level:
16.

Description:
This error message appears when you try to update a view or function that contains an aggregate function or a DISTINCT clause.

Consequences:
The T-SQL statement can be parsed, but causes the error at runtime.

Resolution:
Errors of the Severity Level 16 are generated by the user and can be fixed by the SQL Server user. The statement cannot be executed this way. In order to make the view or the function updateable you need to remove the aggregate function or the DISTINCT clause.

Versions:
All versions of SQL Server.

Example(s):
USE Northwind;
GO
IF OBJECT_ID(‘dbo.MyOrders’, ‘View’) > 0
 DROP VIEW dbo.MyOrders
GO
CREATE VIEW dbo.MyOrders
AS
SELECT DISTINCT *
  FROM dbo.Orders
GO
UPDATE dbo.MyOrders
   SET ShippedDate = NULL
 WHERE ShippedDate IS NULL

Remarks:
In the above example we try to update a view with a DISTINCT clause. This raises the error.

]]>

Leave a comment

Your email address will not be published.