Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Abschnitt werden bekannte Probleme im Zusammenhang mit dem .NET Framework-Datenanbieter für SQL Server (SqlClient) beschrieben.
Nachfolgende Leerzeichen in Zeichenfolgenfunktionen
SQL Server ignoriert nachfolgende Leerzeichen in Zeichenfolgenwerten. Deshalb kann die Übergabe von nachfolgenden Leerzeichen in der Zeichenfolge zu unvorhersehbaren Ergebnissen und sogar zu Fehlern führen.
Wenn Sie nachfolgende Leerzeichen in ihrer Zeichenfolge haben müssen, sollten Sie erwägen, am Ende ein Leerzeichen anzufügen, damit SQL Server die Zeichenfolge nicht kürzen kann. Wenn die nachfolgenden Leerzeichen nicht erforderlich sind, sollten sie gekürzt werden, bevor sie an die Abfragepipeline übergeben werden.
RIGHT-Funktion
Wenn ein Wert, der nicht null
ist, als erstes Argument und 0 als zweites Argument an RIGHT(nvarchar(max)
, 0)
oder RIGHT(varchar(max)
, 0)
übergeben wird, wird der Wert NULL
anstelle einer Zeichenfolge, die empty
ist, zurückgegeben.
CROSS- und OUTER APPLY-Operatoren
CROSS- und OUTER APPLY-Operatoren wurden in SQL Server 2005 eingeführt. In einigen Fällen liefert die Abfragepipeline möglicherweise eine Transact-SQL-Anweisung, die CROSS APPLY- und/oder OUTER APPLY-Operatoren enthält. Da einige Back-End-Anbieter, einschließlich Versionen von SQL Server vor SQL Server 2005, diese Operatoren nicht unterstützen, können solche Abfragen nicht auf diesen Back-End-Anbietern ausgeführt werden.
Im Folgenden finden Sie einige typische Szenarien, die dazu führen können, dass CROSS APPLY- und/oder OUTER APPLY-Operatoren in der Ausgabeabfrage vorhanden sind:
Eine korrelierte Unterabfrage mit Paging.
Ein
AnyElement
über einer korrelierten Unterabfrage oder über einer von der Navigation erzeugten Auflistung.LINQ-Abfragen, die Gruppierungsmethoden verwenden, die eine Elementauswahl akzeptieren.
Eine Abfrage, in der ein CROSS APPLY oder ein OUTER APPLY explizit angegeben wird
Eine Abfrage, die über ein DEREF-Konstrukt über einem REF-Konstrukt verfügt.
SKIP-Operator
Wenn Sie SQL Server 2000 verwenden, gibt die Verwendung von SKIP mit ORDER BY in Nichtschlüsselspalten möglicherweise falsche Ergebnisse zurück. Mehr als die angegebene Anzahl von Zeilen kann übersprungen werden, wenn die Nichtschlüsselspalte doppelte Daten enthält. Dies liegt daran, wie SKIP für SQL Server 2000 übersetzt wird. In der folgenden Abfrage können beispielsweise mehr als fünf Zeilen übersprungen werden, wenn E.NonKeyColumn
doppelte Werte vorhanden sind:
SELECT [E] FROM Container.EntitySet AS [E] ORDER BY [E].[NonKeyColumn] DESC SKIP 5L
Verwenden der richtigen SQL Server-Version
Das Entity Framework verarbeitet die Transact-SQL-Abfrage auf Grundlage der SQL Server-Version, die im Attribut ProviderManifestToken
des Schemaelements in der Speichermodelldatei (SSDL) angegeben ist. Diese Version unterscheidet sich möglicherweise von der Version des tatsächlichen SQL Server, mit dem Sie verbunden sind. Wenn Sie beispielsweise SQL Server 2005 verwenden, ihr ProviderManifestToken
Attribut jedoch auf 2008 festgelegt ist, wird die generierte Transact-SQL Abfrage möglicherweise nicht auf dem Server ausgeführt. Beispielsweise wird eine Abfrage, die die neuen Datumszeittypen verwendet, die in SQL Server 2008 eingeführt wurden, nicht in früheren Versionen von SQL Server ausgeführt. Wenn Sie SQL Server 2005 verwenden, ihr ProviderManifestToken
Attribut jedoch auf 2000 festgelegt ist, ist die generierte Transact-SQL Abfrage möglicherweise weniger optimiert, oder Sie erhalten eine Ausnahme, die besagt, dass die Abfrage nicht unterstützt wird. Weitere Informationen finden Sie oben im Abschnitt über die CROSS- und OUTER APPLY-Operatoren.
Bestimmte Datenbankverhalten sind von der auf die Datenbank festgelegten Kompatibilitätsstufe abhängig. Wenn Ihr ProviderManifestToken
Attribut auf 2005 festgelegt ist und Ihre SQL Server-Version 2005 ist, die Kompatibilitätsstufe einer Datenbank jedoch auf "80" (SQL Server 2000) festgelegt ist, wird die generierte Transact-SQL auf SQL Server 2005 ausgerichtet, kann jedoch aufgrund der Einstellung auf Kompatibilitätsebene nicht wie erwartet ausgeführt werden. So können beispielsweise die Sortierinformationen verloren gehen, wenn ein Spaltenname in der ORDER BY-Liste mit einem Spaltennamen im Selektor übereinstimmt.
Geschachtelte Abfragen in Projektion
Geschachtelte Abfragen in einer Projektionsklausel werden möglicherweise in kartesische Produktabfragen auf dem Server übersetzt. Auf einigen Back-End-Servern, einschließlich SQL Server, kann dies dazu führen, dass die TempDB-Tabelle ziemlich groß wird. Dies kann die Serverleistung verringern.
Nachfolgend sehen Sie ein Beispiel für eine geschachtelte Abfrage in einer Projektionsklausel:
SELECT c, (SELECT c, (SELECT c FROM AdventureWorksModel.Vendor AS c ) As Inner2 FROM AdventureWorksModel.JobCandidate AS c ) As Inner1 FROM AdventureWorksModel.EmployeeDepartmentHistory AS c
Vom Server generierte GUID-Identitätswerte
Das Entity Framework unterstützt vom Server generierte GUID-Typidentitätswerte, der Anbieter muss jedoch die Rückgabe des vom Server generierten Identitätswerts unterstützen, nachdem eine Zeile eingefügt wurde. Ab SQL Server 2005 können Sie den servergenerierten GUID-Typ in einer SQL Server-Datenbank über die OUTPUT-Klausel zurückgeben.