10139: Das %1!-Objekt kann für die '%2!'-Sicht nicht erstellt werden, weil die Sicht eine implizite
Fehlermeldung:
Meldung 10139, Ebene 16, Status 1, Zeile 2
Das %1!-Objekt kann für die '%2!'-Sicht nicht erstellt werden, weil die Sicht eine implizite Konvertierung von 'string' in 'datetime' oder 'smalldatetime' verwendet. Verwenden Sie eine explizite CONVERT-Anweisung mit einem deterministischen Formatwert.
Ebene:
16.
Beschreibung:
Diese Fehlermeldung erscheint, wenn in einer indizierten Sicht auf implizite Konvertierung von String in Datetime oder Smalldatetime zurückgegriffen werden soll.
Auswirkungen:
Das SQL Statement kann zwar geparst werden, jedoch zur Laufzeit wird der Fehler ausgelöst.
Behebung:
Fehler der Ebene 16 sind Fehler, die vom Anwender hervorgerufen werden. Sie können und müssen vom Anwender korrigiert werden. Das Statement kann so nicht ausgeführt werden. Die implizite Konvertierung muss durch eine explizite per CAST oder CONVERT ersetzt werden.
Versionen:
Alle Versionen von SQL Server.
Beispiele:
USE Northwind;
GO
SET 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;
GO
CREATE VIEW dbo.MyOrderView
WITH SCHEMABINDING
AS
SELECT TOP 100 od.UnitPrice*od.Quantity AS Revenue,
o.OrderDate, od.ProductID
FROM dbo.[Order Details] AS od
JOIN dbo.Orders AS o
ON od.OrderID = o.OrderID
WHERE o.OrderDate >= '19970101' AND o.OrderDate <= '19970701'
ORDER BY o.OrderDate
GO
CREATE UNIQUE CLUSTERED INDEX cix_MyOrderView
ON dbo.MyOrderView (OrderDate, ProductID);
GO
Anmerkungen:
Im obigen Beispiel wird die implizite Konvertierung in der WHERE Klausel verwendet. Dies löst den Fehler aus.