Fehlerhafte Änderungen an Funktionen der Datenbank-Engine in SQL Server 2014
In diesem Thema werden wichtige Änderungen in der SQL Server 2014-Datenbank-Engine und früheren Versionen von SQL Server beschrieben. Diese Änderungen können u. U. zur Funktionsunfähigkeit von Anwendungen, Skripts oder Funktionen führen, die auf früheren Versionen von SQL Serverbasieren. Diese Probleme können nach einem Upgrade auftreten. Weitere Informationen finden Sie unter Use Upgrade Advisor to Prepare for Upgrades.
Wichtige Änderungen in SQL Server 2014
Keine neuen Probleme.
Wichtige Änderungen in SQL Server 2012
Transact-SQL
Funktion | BESCHREIBUNG |
---|---|
Auswählen aus Spalten oder Tabellen mit dem Namen NEXT | In Sequenzen wird die ANSI-Standardfunktion NEXT VALUE FOR verwendet. Wenn eine Tabelle oder Spalte den Namen NEXT trägt und die Tabelle oder Spalte als WERT aliast wird, und wenn die ANSI-Standard-AS ausgelassen wird, kann die resultierende Anweisung einen Fehler verursachen. Schließen Sie das ANSI-Standardschlüsselwort AS ein, um das Problem zu umgehen. Beispielsweise müssen SELECT NEXT VALUE FROM Table als SELECT NEXT AS VALUE FROM Table und SELECT Col1 FROM NEXT VALUE als SELECT Col1 FROM NEXT AS VALUE umgeschrieben werden. |
PIVOT-Operator | Der PIVOT-Operator ist nicht in Abfragen für einen rekursiven allgemeinen Tabellenausdruck zugelassen, wenn der Datenbank-Kompatibilitätsgrad auf 110 festgelegt wird. Schreiben Sie die Abfrage um, oder ändern Sie den Kompatibilitätsgrad in 100 oder niedriger. Die Verwendung von PIVOT in einer rekursiven CTE-Abfrage erzeugt falsche Ergebnisse, wenn mehrere Zeilen pro Gruppierung vorhanden sind. |
sp_setapprole und sp_unsetapprole | Der OUTPUT -Parameter des Cookies für sp_setapprole ist zurzeit als varbinary(8000) dokumentiert, was der korrekten maximalen Länge entspricht. Die aktuelle Implementierung gibt jedoch varbinary(50) zurück. Anwendungen müssen weiterhin varbinary(8000) reservieren, damit die Anwendung weiterhin ordnungsgemäß ausgeführt wird, falls die Rückgabegröße des Cookies in einer zukünftigen Version erhöht wird. Weitere Informationen finden Sie unter sp_setapprole (Transact-SQL). |
EXECUTE AS | Der OUTPUT-Parameter des Cookies für EXECUTE AS ist zurzeit als varbinary(8000) dokumentiert, was der korrekten maximalen Länge entspricht. Die aktuelle Implementierung gibt jedoch varbinary(100) zurück. Anwendungen müssen weiterhin varbinary(8000) reservieren, damit die Anwendung weiterhin ordnungsgemäß ausgeführt wird, falls die Rückgabegröße des Cookies in einer zukünftigen Version erhöht wird. Weitere Informationen finden Sie unter EXECUTE AS (Transact-SQL). |
sys.fn_get_audit_file-Funktion | Zwei zusätzliche Spalten (user_defined_event_id und user_defined_information) wurden hinzugefügt, um benutzerdefinierte Überwachungsereignisse zu unterstützen. Anwendungen, bei denen keine Spalten nach Name ausgewählt werden, geben möglicherweise mehr Spalten zurück als erwartet. Wählen Sie entweder Spalten nach Name aus, oder passen Sie die Anwendung so an, dass sie diese zusätzlichen Spalten zulässt. |
Reserviertes Schlüsselwort WITHIN | WITHIN ist jetzt ein reserviertes Schlüsselwort. Verweise auf Objekte oder Spalten mit der Bezeichnung "within" schlagen fehl. Benennen Sie das Objekt oder die Spalte um, oder schränken Sie den Namen mit Klammern oder Anführungszeichen ein. Beispiel: SELECT * FROM [within] . |
CAST- und CONVERT-Vorgänge in berechneten Spalten des Typs time oder datetime2 |
In früheren Versionen von SQL Server ist der Standardstil für CAST- und CONVERT-Vorgänge für time und datetime2 Datentypen 121, außer wenn ein typ in einem berechneten Spaltenausdruck verwendet wird. Für berechnete Spalten ist das Standardformat 0. Dieses Verhalten wirkt sich auf berechnete Spalten aus, wenn sie erstellt werden und in Abfragen mit automatischer Parametrisierung oder in Einschränkungsdefinitionen verwendet werden.Unter dem Kompatibilitätsgrad 110 ist das Standardformat für CAST- und CONVERT-Vorgänge im Fall der Datentypen time und datetime2 immer 121. Basiert die Abfrage auf dem alten Verhalten, verwenden Sie einen Kompatibilitätsgrad unter 110, oder geben Sie in der betroffenen Abfrage explizit das Format 0 an.Ein Update der Datenbank auf Kompatibilitätsgrad 110 ändert keine Benutzerdaten, die auf dem Datenträger gespeichert wurden. Sie müssen diese Daten entsprechend manuell korrigieren. Haben Sie beispielsweise SELECT INFO zum Erstellen einer Tabelle von einer Quelle verwendet, die einen Ausdruck für eine berechnete Spalte (oben beschrieben) beinhaltete, werden die Daten mit dem Format 0 anstelle der Definition der berechneten Spalte an sich gespeichert. Sie müssen diese Daten manuell aktualisieren, um sie an das Format 121 anzupassen. |
ALTER TABLE | Die ALTER TABLE-Anweisung lässt nur zweiteilige Tabellennamen (schema.object) zu. Das Angeben eines Tabellennamens mit den folgenden Formaten schlägt jetzt zur Kompilierzeit mit Fehler 117 fehl: server.database.schema.table .database.schema.table ..schema.table Bei früheren Versionen wurde durch die Angabe des Formats "server.database.schema.table" der Fehler 4902 zurückgegeben. Die Angabe des Formats ".database.schema.table" oder "..schema.table" war erfolgreich. Um das Problem zu beheben, vermeiden Sie die Verwendung eines vierteiligen Präfixes. |
Durchsuchen von Metadaten | Abfragen einer Sicht mit FOR BROWSE oder SET NO_BROWSETABLE ON geben jetzt die Metadaten der Sicht zurück, jedoch nicht die Metadaten des zugrunde liegenden Objekts. Dieses Verhalten entspricht jetzt anderen Methoden zum Durchsuchen von Metadaten. |
SOUNDEX | Unter dem Datenbank-Kompatibilitätsgrad 110 implementiert die SOUNDEX-Funktion neue Regeln, durch die sich möglicherweise die Werte, die von der Funktion berechnet wurden, von den Werten unterscheiden, die unter vorherigen Kompatibilitätsgraden berechnet wurden. Möglicherweise sind die Indizes, Heaps oder CHECK-Einschränkungen, die die SOUNDEX-Funktion verwenden, nach dem Upgrade auf Kompatibilitätsgrad 110 erneut zu erstellen. Weitere Informationen finden Sie unter SOUNDEX (Transact-SQL) |
Meldung zur Zeilenanzahl für fehlgeschlagene DML-Anweisungen | In SQL Server 2012 sendet die Datenbank-Engine das TDS DONE-Token mit RowCount: 0 konsistent an Clients, wenn eine DML-Anweisung fehlschlägt. In früheren Versionen von SQL Server wird ein falscher Wert von -1 an den Client gesendet, wenn die dmL-Anweisung, die fehlschlägt, in einem TRY-CATCH-Block enthalten ist und entweder von der Datenbank-Engine automatisch parameterisiert wird oder der TRY-CATCH-Block nicht auf der gleichen Ebene wie die fehlerhafte Anweisung ist. Wenn beispielsweise ein TRY-CATCH-Block eine gespeicherte Prozedur aufruft und eine DML-Anweisung in der Prozedur fehlschlägt, empfängt der Client den Wert von -1 nicht korrekt. Anwendungen, die auf diesem falschen Verhalten basieren, schlagen fehl. |
SERVERPROPERTY ('Edition') | Die Produktedition der instance SQL Server 2012 wurde installiert. Verwenden Sie den Wert dieser Eigenschaft, um die Funktionen und Beschränkungen zu ermitteln, wie z. B. die maximale Anzahl der CPUs, die vom installierten Produkt unterstützt werden. Basierend auf der installierten Enterprise-Edition kann "Enterprise Edition" oder "Enterprise Edition: Core-based Licensing" zurückgegeben werden. Die Enterprise-Editionen unterscheiden sich anhand der maximalen Computekapazität durch eine einzelne instance SQL Server. Weitere Informationen zu Computekapazitätsgrenzwerten in SQL Server 2012 finden Sie unter Computekapazitätslimits nach Edition von SQL Server. |
CREATE LOGIN | Die CREATE LOGIN WITH PASSWORD = ' Kennwortoption' HASHED kann nicht mit Hashes verwendet werden, die von SQL Server 7 oder früher erstellt wurden. |
CAST- und CONVERT-Vorgänge für datetimeoffset |
Die einzigen Formate, die bei der Konvertierung von Datums- und Uhrzeittypen in datetimeoffset unterstützt werden, sind 0 oder 1. Bei allen anderen Konvertierungsformaten wird der Fehler 9809 zurückgegeben. So gibt der folgende Code z. B. den Fehler 9809 zurück.SELECT CONVERT(date, CAST('7070-11-25 16:25:01.00986 -02:07' as datetimeoffset(5)), 107); |
Dynamische Verwaltungssichten
Sicht | BESCHREIBUNG |
---|---|
sys.dm_exec_requests | Die Befehlsspalte wird von nvarchar(16) in nvarchar(32) geändert. |
sys.dm_os_memory_cache_counters | Die folgenden Spalten wurden umbenannt: single_pages_kb ist jetzt: pages_kb multi_pages_kb ist jetzt: pages_in_use_kb |
sys.dm_os_memory_cache_entries | Die Spalte pages_allocated_count Spalte wurde pages_kb umbenannt. |
sys.dm_os_memory_clerks | Die Spalte multi_pages_kb wurde entfernt. Die Spalte single_pages_kb Spalte wurde pages_kb umbenannt. |
sys.dm_os_memory_nodes | Die folgenden Spalten wurden umbenannt: single_pages_kb ist jetzt: pages_kb multi_pages_kb ist jetzt: foreign_committed_kb |
sys.dm_os_memory_objects | Die folgenden Spalten wurden umbenannt. pages_allocated_count ist jetzt: pages_in_bytes max_pages_allocated_count ist jetzt: max_pages_in_bytes |
sys.dm_os_sys_info | Die folgenden Spalten wurden umbenannt: physical_memory_in_bytes ist jetzt: physical_memory_kb bpool_commit_target ist jetzt: committed_target_kb bpool_visible ist jetzt: visible_target_kb virtual_memory_in_bytes ist jetzt: virtual_memory_kb bpool_commited lautet jetzt: committed_kb |
sys.dm_os_workers | Die Spalte "locale" wurde entfernt. |
Katalogsichten
Sicht | BESCHREIBUNG |
---|---|
sys.data_spaces sys.partition_schemes sys.filegroups sys.partition_functions |
"sys.data_spaces" und "sys.partition_functions" wurde eine neue Spalte (is_system) hinzugefügt. ("sys.partition_schemes" und "sys.filegroups" erben die Spalten von "sys.data_spaces".) Der Wert 1 in dieser Spalte gibt an, dass das Objekt für Volltextindexfragmente verwendet wird. In "sys.partition_functions", "sys.partition_schemes" und "sys.filegroups" ist die neue Spalte nicht die letzte Spalte. Überarbeiten Sie vorhandene Abfragen, die auf der Reihenfolge der Spalten basieren, die von diesen Katalogsichten zurückgegeben wurden. |
SQL CLR-Datentypen (geometry, geography und hierarchyid)
Die Assembly Microsoft.SqlServer.Types.dll, die die räumlichen Datentypen und den hierarchyid-Typ enthält, wurde von Version 10.0 auf Version 11.0 aktualisiert. Benutzerdefinierte Anwendungen, die auf diese Assembly verweisen, schlagen möglicherweise fehl, wenn die folgenden Bedingungen den Wert "true" aufweisen.
Wenn Sie eine benutzerdefinierte Anwendung von einem Computer, auf dem SQL Server 2008 R2 installiert wurde, auf einen Computer verschieben, auf dem nur SQL Server 2014 installiert ist, schlägt die Anwendung fehl, da die referenzierte Version 10.0 der SqlTypes-Assembly nicht vorhanden ist. Möglicherweise wird folgende Fehlermeldung angezeigt:
"Could not load file or assembly 'Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The system cannot find the file specified."
Wenn Sie auf die SqlTypes-Assembly Version 11.0 verweisen und version 10.0 ebenfalls installiert ist, wird möglicherweise die folgende Fehlermeldung angezeigt:
"System.InvalidCastException: Unable to cast object of type 'Microsoft.SqlServer.Types.SqlGeometry' to type 'Microsoft.SqlServer.Types.SqlGeometry'."
Wenn Sie auf die SqlTypes-Assembly Version 11.0 aus einer benutzerdefinierten Anwendung verweisen, die auf .NET 3.5, 4 oder 4.5 ausgerichtet ist, schlägt die Anwendung fehl, da SqlClient von Design Version 10.0 der Assembly lädt. Dieser Fehler tritt auf, wenn die Anwendung eine der folgenden Methoden aufruft:
GetValue
-Methode derSqlDataReader
-KlasseGetValues
-Methode derSqlDataReader
-KlasseKlammerindexoperator [] der
SqlDataReader
-KlasseExecuteScalar
-Methode derSqlCommand
-Klasse
Sie können dieses Problem mithilfe einer der folgenden Methoden umgehen:
Sie können dieses Problem im Code umgehen, indem Sie anstelle der oben aufgeführten Get-Methoden die
GetSqlBytes
Methode aufrufen, um CLR-SQL Server-Systemtypen abzurufen, wie im folgenden Beispiel gezeigt:string query = "SELECT [SpatialColumn] FROM [SpatialTable]"; using (SqlConnection conn = new SqlConnection("...")) { SqlCommand cmd = new SqlCommand(query, conn); conn.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { // In version 11.0 only SqlGeometry g = SqlGeometry.Deserialize(reader.GetSqlBytes(0)); // In version 10.0 or 11.0 SqlGeometry g2 = new SqlGeometry(); g.Read(new BinaryReader(reader.GetSqlBytes(0).Stream)); } }
Sie können dieses Problem umgehen, indem Sie eine Assemblyumleitung in der Anwendungskonfigurationsdatei verwenden. Siehe folgendes Beispiel:
<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> ... <dependentAssembly> <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" /> <bindingRedirect oldVersion="10.0.0.0" newVersion="11.0.0.0" /> </dependentAssembly> ... </assemblyBinding> <runtime>
Sie können dieses Problem in der Verbindungszeichenfolge umgehen, indem Sie den Wert "SQL Server 2012" für das Attribut "Typsystemversion" angeben, um SqlClient zu zwingen, Version 11.0 der Assembly zu laden. Dieses Verbindungszeichenfolgenattribut ist erst ab .NET 4.5 verfügbar.
Das
assemblyBinding
-Tag sollte unter demruntime
-Tag eingebunden werden.
Unterstützung für AWE
AWE (Address Windowing Extensions, 32-Bit-Version) wird nicht mehr unterstützt. Dies könnte bei 32-Bit-Betriebssystemen zu geringerer Leistungsstärke führen. Migrieren Sie bei Installationen mit großem Arbeitsspeichervolumen zu einem 64-Bit-Betriebssystem.
XQuery-Funktionen sind ersatzzeichenabhängig
Die W3C-Empfehlung für XQuery-Funktionen und -Operatoren erfordert die Berücksichtigung eines Ersatzzeichenpaares, das ein Unicode-Zeichen für den oberen Bereich als einzelnes Symbol in UTF-16-Codierung darstellt. In Versionen von SQL Server vor SQL Server 2012 erkannten Zeichenfolgenfunktionen Ersatzpaare jedoch nicht als einzelnes Zeichen. Einige Zeichenfolgenvorgänge – z. B. Zeichenfolgenlängenberechnungen und Teilzeichenfolgenextraktionen – haben falsche Ergebnisse zurückgegeben. SQL Server 2012 unterstützt jetzt UTF-16 und die richtige Behandlung von Ersatzpaaren vollständig.
Der XML-Datentyp in SQL Server lässt nur wohlgeformte Ersatzpaare zu. Einige Funktionen können jedoch unter bestimmten Umständen nicht definierte oder unerwartete Ergebnisse zurückgeben, da ungültige oder partielle Ersatzzeichenpaare an XQuery-Funktionen als Zeichenfolgenwerte übergeben werden können. Berücksichtigen Sie die folgenden Methoden zum Generieren von Zeichenfolgenwerten, wenn Sie XQuery in SQL Server verwenden:
Stellen Sie einen konstanten Zeichenfolgenwert als Binärwert bereit. Bei Verwendung dieser Methode ist es weiterhin möglich, ungültige oder partielle Ersatzzeichenpaare zu übergeben.
Stellen Sie einen konstanten Zeichenfolgenwert bereit, indem Sie Zeichenentitäten bereitstellen. Bei Verwendung dieser Methode ist es nicht möglich, ungültige Ersatzzeichenpaare zu übergeben. Die XQuery-Funktionen erfordern eine einzelne Zeichenentität für das Zeichen auf hoher Ebene. Diese Funktionen lösen einen Fehler aus, wenn die Zeichenentitäten für die Ersatzzeichenpaare bereitgestellt werden.
Importieren Sie externe Werte mithilfe von sql:column oder sql:variable. Bei Verwendung dieser Methoden ist es weiterhin möglich, ungültige oder partielle Ersatzzeichenpaare einzuführen.
Betroffene XQuery-Funktionen und -Operatoren
Die folgenden XQuery-Funktionen und -Operatoren behandeln jetzt UTF-16-Ersatzpaare in SQL Server 2012 ordnungsgemäß:
fn:string-length. Wenn jedoch ein ungültiges oder partielles Ersatzpaar als Argument übergeben wird, ist das Verhalten von Zeichenfolgenlänge nicht definiert.
fn:substring.
fn:contains. Wenn jedoch ein partielles Ersatzpaar als Wert übergeben wird, kann "contains " unerwartete Ergebnisse zurückgeben, da es möglicherweise das partielle Ersatzpaar findet, das in einem wohlgeformten Ersatzpaar enthalten ist.
fn:concat. Wenn jedoch ein partielles Ersatzpaar als Wert übergeben wird, kann concat falsche Ersatzpaare oder partielle Ersatzpaare erzeugen.
Vergleichsoperatoren und die Order by-Klausel . Vergleichsoperatoren sind +, <, , =<,
eq
>, ,gt
lt
,le
undge
. >
Aufrufe von verteilten Abfragen an eine Systemprozedur
Verteilte Abfrageaufrufe OPENQUERY
für einige Systemprozeduren schlagen fehl, wenn sie von einem SQL Server 2012-Server auf einen anderen aufgerufen werden. Dies tritt auf, wenn datenbank-Engine keine Metadaten für eine Prozedur ermitteln kann. Beispiel: SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo')
.
Isolationsstufe und sp_reset_connection
Die Isolationsstufe für Verbindungen wird von Client-Treibern wie folgt behandelt:
Alle nativen Treiber (SNAC, MDAC, ODBC) legen die Isolationsstufe (auf Grundlage der Anwendungseinstellung) auf sp_reset_connection fest.
Für ADO.NET erhalten Sie im Wesentlichen eine zufällige Isolationsstufe, je nachdem, welche Verbindung Sie aus dem Pool abrufen (und ob die Anwendung eine andere Isolationsstufe verwendet). Da ein ADO.NET-Pool Verbindungen intern und transparent wiederverwenden kann, können Sie nicht vorhersagen, was Sie aus dem Pool erhalten werden.
Für den JDBC-Treiber erhalten Sie dasselbe Verhalten wie für ADO.NET.
Die Anwendung muss nach dem Öffnen der Verbindung immer explizit die Isolationsstufe festlegen, um zu erhalten, was sie benötigt.
Die JDBC-Verbindung kann gepoolt werden, sodass die Anwendung eine zufällige Isolationsstufe erhalten kann, ohne dies zu wissen.
Um die Abwärtskompatibilität aufrechtzuerhalten, gilt dieses neue Verhalten nur für aktuelle Clients ab TDS 7.4.
Backward Compatibility
Neues Verhalten hängt vom Kompatibilitätsgrad ab
Die folgenden Funktionen und Operatoren zeigen das neue oben beschriebene Verhalten nur, wenn der Kompatibilitätsgrad mindestens 110 ist:
fn:contains.
fn:concat.
Vergleichsoperatoren und Reihenfolge nach Klausel
Neues Verhalten hängt vom Standardnamespace-URI für Funktionen ab
Die folgenden Funktionen veranschaulichen das oben beschriebene neue Verhalten nur, wenn der Standardnamespace-URI dem Namespace in der endgültigen Empfehlung entspricht, d. h http://www.w3.org/2005/xpath-functions. . Wenn der Kompatibilitätsgrad 110 oder höher ist, bindet SQL Server 2012 standardmäßig den Standardfunktionsnamespace an diesen Namespace. Diese Funktionen zeigen das neue Verhalten, wenn dieser Namespace unabhängig vom Kompatibilitätsgrad verwendet wird.
fn:string-length
fn:substring
Wichtige Änderungen in SQL Server 2008/SQL Server 2008 R2
Dieser Abschnitt enthält die breaking changes, die in SQL Server 2008 eingeführt wurden. In SQL Server 2008 R2 wurden keine Änderungen vorgenommen.
Sortierungen
Funktion | BESCHREIBUNG |
---|---|
Neue Sortierungen | SQL Server 2008 führt neue Sortierungen ein, die vollständig auf die von Windows Server 2008 bereitgestellten Sortierungen ausgerichtet sind. Durch die 80 neuen Sortierungen wurde die linguistische Genauigkeit verbessert; sie sind mit dem Versionshinweis "* _100" gekennzeichnet. Beachten Sie, dass eine neue Sortierung für den Server oder die Datenbank möglicherweise von Clients mit älteren Treibern nicht erkannt wird. Unbekannte Sortierungen können zu Anwendungsfehlern führen. Ziehen Sie die folgenden Lösungen in Betracht: Aktualisieren Sie das Clientbetriebssystem, um die zugrunde liegenden Systemsortierungen zu aktualisieren. Wenn auf dem Client Datenbankclient-Software installiert ist, sollten Sie ein Dienstupdate der Datenbankclient-Software in Erwägung ziehen. Wählen Sie eine vorhandene Sortierung aus, die einer Codepage auf dem Client zugeordnet wird. |
Common Language Runtime (CLR)
Funktion | BESCHREIBUNG |
---|---|
CLR-Assemblys | Wenn eine Datenbank auf SQL Server 2008 aktualisiert wird, wird die Microsoft.SqlServer.Types Assembly zur Unterstützung neuer Datentypen automatisch installiert. Upgrade Advisor-Regeln erkennen alle Benutzertypen oder Assemblys mit in Konflikt stehenden Namen. Der Upgrade Advisor schlägt im Fall von in Konflikt stehenden Assemblys das Umbenennen vor, und bei in Konflikt stehenden Typen das Umbenennen oder das Verwenden von zweiteiligen Namen im Code, um auf diesen bereits vorhandenen Benutzertypen zu verweisen.Wenn bei einem Datenbankupgrade eine Benutzerassembly mit in Konflikt stehendem Namen entdeckt wird, wird diese Assembly automatisch umbenannt und die Datenbank in den Fehlerverdachtmodus versetzt. Sollte während des Upgrades ein Benutzertyp mit in Konflikt stehendem Namen vorhanden sein, werden keine speziellen Schritte ausgeführt. Nach dem Upgrade sind sowohl der alte Benutzertyp als auch der neue Systemtyp vorhanden. Der Benutzertyp steht nur bei Verwendung von zweiteiligen Namen zur Verfügung. |
CLR-Assemblys | SQL Server 2008 installiert .NET Framework 3.5 SP1, wodurch Bibliotheken im globalen Assemblycache (GAC) aktualisiert werden. Wenn Sie nicht unterstützte Bibliotheken in einer SQL Server-Datenbank registriert haben, funktioniert Ihre SQL Server Anwendung nach dem Upgrade auf SQL Server 2008 möglicherweise nicht mehr. Dies liegt daran, dass das Warten oder Aktualisieren von Bibliotheken im GAC keine Assemblys in SQL Server aktualisiert. Wenn eine Assembly sowohl in einer SQL Server-Datenbank als auch im GAC vorhanden ist, müssen die beiden Kopien der Assembly genau übereinstimmen. Wenn sie nicht übereinstimmen, tritt ein Fehler auf, wenn die Assembly von SQL Server CLR-Integration verwendet wird. Weitere Informationen finden Sie unter Unterstützte .NET Framework-Bibliotheken. Nachdem Sie Ihre Datenbank aktualisiert haben, können Sie die Kopie der Assembly in Ihrem SQL Server Datenbanken mit der ALTER ASSEMBLY-Anweisung aktualisieren. Weitere Informationen finden Sie im Knowledge Base-Artikel 949080. Sie können auch die folgende Abfrage in Ihrer Datenbank ausführen, um festzustellen, ob in der Anwendung nicht unterstützte .NET Framework-Bibliotheken verwendet werden. SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%'; |
CLR-Routinen | Die Verwendung des Identitätswechsels in benutzerdefinierten CLR-Funktionen, benutzerdefinierten Aggregaten oder benutzerdefinierten Typen (UDTs) kann dazu führen, dass Ihre Anwendung nach dem Upgrade auf SQL Server 2008 mit dem Fehler 6522 fehlschlägt. Die folgenden Szenarien sind in SQL Server 2005 erfolgreich, schlagen jedoch in SQL Server 2008 fehl. Für jedes Szenario werden Auflösungen bereitgestellt. Eine benutzerdefinierte CLR-Funktion, eine benutzerdefinierte Aggregat- oder UDT-Methode, die den Identitätswechsel verwendet, verfügt über einen Parameter vom Typ nvarchar(max) , varbinary(max) ntext varchar(max) , , text , , image oder einen großen UDT und verfügt nicht über das DataAccessKind.Read-Attribut für die -Methode. Um dieses Problem zu beheben, fügen Sie das DataAccessKind.Read-Attribut für die -Methode hinzu, kompilieren die Assembly neu, und stellen Sie die Routine und die Assembly erneut bereit.Eine CLR-Tabellenwertfunktion mit einer Init-Methode , die einen Identitätswechsel durchführt. Um dieses Problem zu beheben, fügen Sie das Attribut DataAccessKind.Read für die -Methode hinzu, kompilieren Sie die Assembly neu, und stellen Sie die Routine und die Assembly erneut bereit. Eine CLR-Tabellenwertfunktion mit einer FillRow-Methode , die identitätswechselt. Um dieses Problem zu beheben, entfernen Sie den Identitätswechsel aus der FillRow-Methode . Greifen Sie nicht mithilfe der FillRow-Methode auf externe Ressourcen zu. Greifen Sie stattdessen über die Init-Methode auf externe Ressourcen zu. |
Dynamische Verwaltungssichten
Sicht | BESCHREIBUNG |
---|---|
sys.dm_os_sys_info | Entfernt die Spalte cpu_ticks_in_ms- und die sqlserver_start_time_cpu_ticks. |
sys.dm_exec_query_resource_semaphoressys.dm_exec_query_memory_grants | Die spalte resource_semaphore_id ist keine eindeutige ID in SQL Server 2008. Diese Änderung kann die Abfrageausführung bei der Problembehandlung beeinflussen. Weitere Informationen finden Sie unter sys.dm_exec_query_resource_semaphores (Transact-SQL). |
Fehler und Ereignisse
Funktion | BESCHREIBUNG |
---|---|
Fehler beim Anmelden | In SQL Server 2005 wird der Fehler 18452 zurückgegeben, wenn eine SQL-Anmeldung verwendet wird, um eine Verbindung mit einem Server herzustellen, der nur für die Verwendung der Windows-Authentifizierung konfiguriert ist. In SQL Server 2008 wird stattdessen der Fehler 18456 zurückgegeben. |
Showplan
Funktion | BESCHREIBUNG |
---|---|
Showplan (XML-Schema) | Dem Showplan XML-Schema wird ein neues SeekPredicateNew-Element hinzugefügt, und die einschließende xsd-Sequenz (SqlPredicatesType) wird in ein <xsd:choice-Element> konvertiert. Anstelle eines oder mehrerer SeekPredicate-Elemente können jetzt mindestens ein SeekPredicateNew-Element im Showplan-XML angezeigt werden. Die beiden Elemente schließen sich gegenseitig aus. SeekPredicate wird aus Gründen der Abwärtskompatibilität im Showplan-XML-Schema beibehalten. Abfragepläne, die in SQL Server 2008 erstellt wurden, können jedoch das SeekPredicateNew-Element enthalten. Anwendungen, die nur das untergeordnete SeekPredicate-Element vom Knoten ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates abrufen möchten, können fehlschlagen, wenn das SeekPredicate-Element nicht vorhanden ist. Schreiben Sie die Anwendung neu, um entweder das SeekPredicate - oder SeekPredicateNew-Element in diesem Knoten zu erwarten. Weitere Informationen finden Sie unter . |
Showplan (XML-Schema) | Dem komplexen Typ ObjectType im Showplan XML-Schema wird ein neues IndexKind-Attribut hinzugefügt. Anwendungen, die SQL Server Pläne streng anhand des SQL Server 2005-Schemas überprüfen, schlagen fehl. |
Transact-SQL
Funktion | BESCHREIBUNG |
---|---|
ALTER_AUTHORIZATION_DATABASE DDL-Ereignis | Wenn in SQL Server 2005 das DDL-Ereignis ALTER_AUTHORIZATION_DATABASE ausgelöst wird, wird der Wert "object" im ObjectType-Element der EVENTDATA-XML für dieses Ereignis zurückgegeben, wenn der Entitätstyp des sicherungsfähigen im DDL-Vorgang (Data Definition Language) ein Objekt ist. In SQL Server 2008 wird der tatsächliche Typ (z. B. "table" oder "function") zurückgegeben. |
CONVERT | Wenn ein ungültiges Format an die CONVERT-Funktion übergeben wird und eine Konvertierung vom Binärformat ins Zeichenformat oder vom Zeichenformat ins Binärformat ausgeführt werden soll, wird ein Fehler zurückgegeben. In früheren Versionen von SQL Server ist die ungültige Formatvorlage auf die Standardformatvorlage für Konvertierungen von Binärzeichen und Zeichen in Binärzeichen festgelegt. |
GRANT/DENY/REVOKE EXECUTE für Assemblys | EXECUTE-Berechtigungen können nicht für Assemblys gewährt, verweigert oder widerrufen werden. Diese Berechtigung hat keine Auswirkungen mehr und generiert einen Fehler. Gewähren, verweigern oder widerrufen Sie die EXECUTE-Berechtigung stattdessen für gespeicherte Prozeduren oder Funktionen, die auf die Assemblymethode verweisen. |
GRANT/DENY/REVOKE-Berechtigungen für Systemtypen | Berechtigungen können nicht für Systemtypen gewährt, verweigert oder widerrufen werden. In früheren Versionen von SQL Server sind diese Anweisungen zwar erfolgreich, haben aber keine Auswirkungen. In SQL Server 2008 wird ein Fehler zurückgegeben. |
GROUP BY | Die GROUP BY-Klausel darf keine Unterabfrage in einem Ausdruck enthalten, der für die GROUP BY-Liste verwendet wird. In früheren Versionen von SQL Server war dies zulässig. In SQL Server 2008 wird Fehler 144 zurückgegeben. Beispielsweise ist die Ausführung des folgenden Codes in SQL Server 2005 erfolgreich, in SQL Server 2008 hingegen nicht. DECLARE @Test TABLE(a int NOT NULL); INSERT INTO @Test SELECT 1 union ALL SELECT 2; SELECT COUNT(*) FROM @Test GROUP BY CASE WHEN a IN (SELECT t.a FROM @Test AS t) THEN 1 ELSE 0 END; |
OUTPUT-Klausel | Um nicht deterministisches Verhalten zu vermeiden, darf die OUTPUT-Klausel nicht auf eine Spalte einer Sicht oder Inline-Tabellenwertfunktion verweisen, wenn diese Spalte mithilfe einer der folgenden Methoden definiert wurde: Eine Unterabfrage. Eine benutzerdefinierte Funktion, die auf Benutzer- oder Systemdaten zugreift bzw. bei der davon ausgegangen wird, dass sie einen solchen Zugriff ausführt. Eine berechnete Spalte, die eine benutzerdefinierte Funktion enthält, die in ihrer Definition auf Benutzer- oder Systemdaten zugreift. Wenn SQL Server eine solche Spalte in der OUTPUT-Klausel erkennt, wird der Fehler 4186 ausgelöst. Weitere Informationen finden Sie unter MSSQLSERVER_4186. |
OUTPUT INTO-Klausel | Für die Zieltabelle der OUTPUT INTO-Klausel dürfen keine Trigger aktiviert sein. |
Rang vorausberechnen-Option auf Serverebene | Diese Option wird in SQL Server 2008 nicht unterstützt. Ändern Sie Anwendungen, die diese Funktion derzeit verwenden, so schnell wie möglich. |
READPAST-Tabellenhinweis | Unter Momentaufnahmeisolation dürfen Sie den READPAST-Hinweis nicht angeben. Der READPAST-Hinweis wird ignoriert, wenn entweder die READ_COMMITED_SNAPSHOT-Datenbankoption oder die ALLOW_SNAPSHOT_ISOLATION-Datenbankoption auf ON festgelegt ist. Wenn Sie den READPAST-Hinweis jedoch mit READCOMMITTEDLOCK kombinieren, ist das READPAST-Verhalten mit dem des blockierenden READCOMMITTED-Hinweises identisch. |
sp_helpuser | Die folgenden Spaltennamen, die im Resultset der sp_helpuser gespeicherten Prozedur zurückgegeben werden, haben sich geändert: GroupName lautet jetzt: RoleName Group_name lautet jetzt: Role_name Group_id lautet jetzt: Role_id Users_in_group lautet jetzt: Users_in_role |
Transparente Datenverschlüsselung | Die transparente Datenverschlüsselung (Transparent Data Encryption, TDE) erfolgt auf E/A-Ebene: Die Struktur der Seite im Speicher ist nicht verschlüsselt, und die Seite wird erst beim Schreiben auf einen Datenträger verschlüsselt. Die Datenbankdateien und die Protokolldateien werden verschlüsselt. Drittanbieteranwendungen, die den regulären SQL Server Mechanismus für den Zugriff auf Seiten umgehen (z. B. durch direktes Scannen der Daten oder Protokolldateien), schlagen fehl, wenn eine Datenbank TDE verwendet, da die Daten in den Dateien verschlüsselt sind. Solche Anwendungen können die Window Cryptographic API nutzen, um eine Lösung zum Entschlüsseln der Daten außerhalb von SQL Server zu entwickeln. |
XQuery
Funktion | BESCHREIBUNG |
---|---|
Datetime-Unterstützung | In SQL Server 2005 haben die Datentypen xs:time , xs:date und xs:dateTime keine Zeitzonenunterstützung. Zeitzonendaten werden der UTC-Zeitzone zugeordnet. SQL Server 2008 bietet standardkonformes Verhalten, was zu den folgenden Änderungen führt:Werte ohne Zeitzone werden überprüft. Die bereitgestellte Zeitzone wird beibehalten; wenn keine Zeitzone bereitgestellt wird, wird diese Einstellung ebenfalls beibehalten. Die interne Speicherdarstellung wird geändert. Die Auflösung von gespeicherten Werten wird erhöht. Negative Jahre sind nicht zulässig. Hinweis: Ändern Sie Anwendungen und XQuery-Ausdrücke, um die neuen Typwerte zu berücksichtigen. |
XQuery und Xpath-Ausdrücke | In SQL Server 2005 sind Schritte in einem XQuery- oder XPath-Ausdruck zulässig, die mit einem Doppelpunkt (':') beginnen. Die folgende Anweisung enthält zum Beispiel einen Namenstest (CTR02) ) innerhalb des Pfadausdrucks, der mit einem Doppelpunkt beginnt.SELECT FileContext.query('for n$ in //CTR return <C>{data )(n$/:CTR02)} </C>) AS Files FROM dbo.MyTable; In SQL Server 2008 ist diese Verwendung nicht zulässig, da sie nicht den XML-Standards entspricht. Der Fehler 9341 wird zurückgegeben. Entfernen Sie den führenden Doppelpunkt, oder geben Sie ein Präfix für den Namenstest an, z. B. (n$/p1:CTR02) oder (n$/CTR02). |
Verbindung
Funktion | BESCHREIBUNG |
---|---|
Herstellen einer Verbindung von SQL Server Native Client mithilfe von SSL | Beim Herstellen einer Verbindung mit SQL Server Native Client anwendungen, die "SERVER=shortname; FORCE ENCRYPTION=true" mit Zertifikat, dessen Antragsteller die vollqualifizierten Domänennamen (FQDN) angeben, die in der Vergangenheit aufgrund einer gelockerten Überprüfung verbunden wurden. SQL Server 2008 R2 erhöht die Sicherheit, indem ein FQDN-Betreff für Zertifikate erzwungen wird. Anwendungen, die auf einer weniger strengen Überprüfung basieren, müssen eine der folgenden Aktionen ausführen: Verwenden des FQDNs in der Verbindungszeichenfolge Diese Option erfordert keine erneute Kompilierung der Anwendung, wenn die SERVER-Schlüsselwort (keyword) der Verbindungszeichenfolge außerhalb der Anwendung konfiguriert ist. – Diese Option funktioniert nicht für Anwendungen, deren Verbindungszeichenfolgen hartcodiert sind. – Diese Option funktioniert nicht für Anwendungen, die die Datenbankspiegelung verwenden, da der gespiegelte Server mit einem einfachen Namen antwortet. |
Hinzufügen eines Alias für den Kurznamen, um eine Zuordnung mit dem FQDN herzustellen – Diese Option funktioniert auch für Anwendungen, deren Verbindungszeichenfolgen hartcodiert sind. – Diese Option funktioniert nicht für Anwendungen, die Datenbankspiegelung verwenden, da die Anbieter keine Aliase für empfangene Failoverpartnernamen suchen. |
|
Für den Kurznamen muss ein Zertifikat ausgestellt werden. – Diese Option funktioniert für alle Anwendungen. |
Wichtige Änderungen in SQL Server 2005
Wir sammeln und bewahren Dokumentationen für sehr alte Versionen von Microsoft SQL Server in einer Reihe von Archivwebseiten auf. Die archivierten Webseiten werden nicht von Suchmaschinen wie Bing.com und Google.com verarbeitet. Sie können diese Archive jedoch in unserer Dokumentation vorherige Versionen/ Adresse sehen:
Diese Archive beinhalten die Dokumentation für mindestens folgende ältere Versionen:
- SQL Server 2014
- SQL Server 2012
- SQL Server 2008 R2
- SQL Server 2008
- SQL Server 2005
SQL Server 2014-Dokumentation wurde archiviert und wird nicht mehr von Suchmaschinen verarbeitet. Die Artikel 2014 deklarieren sich nun mit NOINDEX und NOFOLLOW.
Die neueste Version von SQL Server sowie andere aktuelle Versionen sind hier dokumentiert.
Weitere Informationen
Als veraltet markierte Funktionen der Datenbank-Engine in SQL Server 2014
Verhaltensänderungen von Datenbank-Engine-Funktionen in SQL Server 2014
Nicht mehr unterstützte Datenbank-Engine-Funktionalität in SQL Server 2014
Abwärtskompatibilität der SQL Server-Datenbank-Engine
ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL)
Wichtige Änderungen an Funktionen der Verwaltungstools in SQL Server 2014