Write for Us
Error Message:Msg 1947, Level 16, State 1, Line 2Cannot create %S_MSG on view "%.*ls". The view contains a self join on "%.*ls".
Severity level:16.
Description:This error message appears when you try to create an indexed view that contains a self-join.
Consequences:The T-SQL statement can be parsed, but causes the error at runtime.
Resolution:Error of the Severity Level 16 are generated by the user and are corrigible by the user. The statement cannot be executed this way. The self-join must be removed.
Versions:All versions of SQL Server.
Example(s):USE Northwind;GOSET NUMERIC_ROUNDABORT OFF;SET ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS ON;GO
IF OBJECT_ID ('dbo.MyOrderView', 'View') > 0 DROP VIEW dbo.MyOrderView;GOCREATE VIEW dbo.MyOrderViewWITH SCHEMABINDINGASSELECT SUM(od.UnitPrice*od.Quantity*(1.00-od.Discount)) AS Revenue, o.OrderDate, od.ProductID, COUNT_BIG(*) AS MyCount FROM dbo.[Order Details] AS od JOIN dbo.Orders AS o ON od.OrderID = o.OrderID JOIN dbo.Orders t1 ON o.OrderID = t1.OrderID GROUP BY o.OrderDate, od.ProductID;GO
CREATE UNIQUE CLUSTERED INDEX cix_MyOrderView ON dbo.MyOrderView (OrderDate, ProductID);GO
Remarks:In the above example we try to index the view MyOrderView. Because this view contains a self-join on the table Orders, the error is raised.