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 Thema werden die einschneidenden Änderungen im SQL Server 2014-Datenbank-Modul und in 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 Verwenden des Upgraderatgebers zum Vorbereiten auf Upgrades.
Unterbrechen von Änderungen in SQL Server 2014
Keine neuen Probleme.
Unterbrechen von Änderungen in SQL Server 2012
Transact-SQL
| Merkmal | BESCHREIBUNG |
|---|---|
| Auswählen aus Spalten oder Tabellen mit dem Namen NEXT | Sequenzen verwenden die ANSI-Standard-NEXT VALUE FOR-Funktion. Wenn eine Tabelle oder eine Spalte NEXT heißt und die Tabelle oder Spalte als WERT aliasiert wird, und wenn der ANSI-Standard AS weggelassen wird, kann die resultierende Anweisung einen Fehler verursachen. Um zu umgehen, schließen Sie das ANSI-Standard-AS-Schlüsselwort ein. Beispielsweise sollte SELECT NEXT VALUE FROM Table in SELECT NEXT AS VALUE FROM Table umgeschrieben werden und SELECT Col1 FROM NEXT VALUE in SELECT Col1 FROM NEXT AS VALUE. |
| PIVOT-Operator | Der PIVOT-Operator ist in einer rekursiven CTE-Abfrage (Common Table Expression) nicht zulässig, wenn die Datenbankkompatibilitätsebene auf 110 festgelegt ist. Schreiben Sie die Abfrage neu, oder ändern Sie die Kompatibilitätsebene auf 100 oder niedriger. Die Verwendung von PIVOT in einer rekursiven CTE-Abfrage erzeugt falsche Ergebnisse, wenn mehr als eine einzelne Zeile pro Gruppierung vorhanden ist. |
| sp_setapprole und sp_unsetapprole | Der Cookie-Parameter OUTPUT für sp_setapprole ist derzeit als varbinary(8000) dokumentiert, was die richtige maximale Länge ist. Die aktuelle Implementierung gibt jedoch zurück varbinary(50). Anwendungen sollten weiterhin varbinary(8000) reserviert halten, damit die Anwendungen auch dann ordnungsgemäß funktionieren, wenn die Cookie-Rückgabegröße in einer zukünftigen Version zunimmt. Weitere Informationen finden Sie unter sp_setapprole (Transact-SQL). |
| AUSFÜHREN ALS | Der Cookie OUTPUT-Parameter für EXECUTE AS ist derzeit dokumentiert, als varbinary(8000) die richtige maximale Länge. Die aktuelle Implementierung gibt jedoch zurück varbinary(100). Anwendungen sollten weiterhin varbinary(8000) reservieren, damit die Anwendung auch dann noch ordnungsgemäß funktioniert, wenn die Cookie-Rückgabegröße in einer zukünftigen Version zunimmt. 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, die keine Spalten nach Namen auswählen, geben möglicherweise mehr Spalten als erwartet zurück. Wählen Sie entweder Spalten nach Namen aus, oder passen Sie die Anwendung an, um diese zusätzlichen Spalten zu akzeptieren. |
| WITHIN reserviertes Schlüsselwort | WITHIN ist jetzt ein reserviertes Schlüsselwort. Verweise auf Objekte oder Spalten mit dem Namen "within" schlagen fehl. Benennen Sie den Objekt- oder Spaltennamen um, oder trennen Sie den Namen mithilfe von Klammern oder Anführungszeichen. Beispiel: SELECT * FROM [within]. |
CAST- und CONVERT-Operationen bei berechneten Spalten des Typs time oder datetime2 |
In früheren Versionen von SQL Server beträgt die Standardformatvorlage für CAST- und CONVERT-Vorgänge für time- und datetime2-Datentypen 121, außer wenn einer der Typen 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 Kompatibilitätsebene 110 ist der Standardstil für CAST- und CONVERT-Vorgänge bei den Datentypen time und datetime2 stets 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.Durch das Upgrade der Datenbank auf Kompatibilitätsebene 110 werden keine Benutzerdaten geändert, die auf dem Datenträger gespeichert wurden. Sie müssen diese Daten entsprechend manuell korrigieren. Wenn Sie beispielsweise SELECT INTO verwendet haben, um eine Tabelle aus einer Quelle zu erstellen, die einen oben beschriebenen berechneten Spaltenausdruck enthielt, werden die Daten (mit Formatvorlage 0) anstelle der berechneten Spaltendefinition selbst gespeichert. Sie müssen diese Daten manuell aktualisieren, um sie an das Format 121 anzupassen. |
| ALTER TABELLE | Die ALTER TABLE-Anweisung lässt nur zweiteilige Tabellennamen (Schema.object) zu. Das Angeben eines Tabellennamens mithilfe der folgenden Formate schlägt zur Kompilierungszeit mit Fehler 117 fehl: server.database.schema.table .database.schema.table .. schema.table In früheren Versionen, bei Angabe des Formats server.database.schema.table wurde der Fehler 4902 zurückgegeben. Das Angeben des Formats .database.schema.table oder des Formats ..schema.table war erfolgreich. Um das Problem zu beheben, entfernen Sie die Verwendung eines 4-Part-Präfixes. |
| Browsermetadaten | Beim Abfragen einer Ansicht mithilfe von FOR BROWSE oder SET NO_BROWSETABLE ON werden jetzt die Metadaten der Ansicht und nicht die Metadaten des zugrunde liegenden Objekts zurückgegeben. Dieses Verhalten entspricht jetzt anderen Methoden des Browsens von Metadaten. |
| SOUNDEX | Unter der Datenbankkompatibilitätsebene 110 implementiert die SOUNDEX-Funktion neue Regeln, die dazu führen können, dass die von der Funktion berechneten Werte von den unter früheren Kompatibilitätsstufen berechneten Werten abweichen. Nach dem Upgrade auf Kompatibilitätsebene 110 müssen Sie möglicherweise die Indizes, Heaps oder CHECK-Einschränkungen neu erstellen, die die SOUNDEX-Funktion verwenden. Weitere Informationen finden Sie unter SOUNDEX (Transact-SQL) |
| Nachricht zur Zeilenanzahl bei fehlgeschlagenen DML-Anweisungen | In SQL Server 2012 sendet das Datenbankmodul das TDS DONE-Token konsistent mit RowCount: 0 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 vom Datenbankmodul automatischparametert wird oder der TRY-CATCH-Block nicht auf der gleichen Ebene wie die fehlgeschlagene Anweisung ist. Wenn beispielsweise ein TRY-CATCH-Block eine gespeicherte Prozedur aufruft und eine DML-Anweisung in der Prozedur fehlschlägt, erhält der Client fälschlicherweise einen -1 Wert. Anwendungen, die auf diesem falschen Verhalten basieren, schlagen fehl. |
| SERVERPROPERTY ('Edition') | Installierte Produktedition der Instanz von SQL Server 2012. Verwenden Sie den Wert dieser Eigenschaft, um die Features und Grenzwerte zu ermitteln, z. B. die maximale Anzahl von CPUs, die vom installierten Produkt unterstützt werden. Basierend auf der installierten Enterprise-Edition kann dies "Enterprise Edition" oder "Enterprise Edition: Core-based Licensing" zurückgeben. Die Enterprise-Editionen werden basierend auf der maximalen Computekapazität durch eine einzelne Instanz von SQL Server unterschieden. Weitere Informationen zu Computekapazitätsgrenzwerten in SQL Server 2012 finden Sie unter Compute Capacity Limits by Edition of SQL Server. |
| LOGIN ERSTELLEN | Die CREATE LOGIN WITH PASSWORD = 'Kennwortoption' HASHED kann nicht mit Hashes verwendet werden, die von SQL Server 7 oder einer früheren Version erstellt wurden. |
CAST- und CONVERT-Vorgänge für datetimeoffset |
Die einzigen Stile, die beim Konvertieren von Datums- und Uhrzeittypen zu datetimeoffset unterstützt werden, sind 0 oder 1. Alle anderen Konvertierungsstile geben Fehler 9809 zurück. Der folgende Code gibt 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
| Ansehen | BESCHREIBUNG |
|---|---|
| sys.dm_exec_requests | Die Befehlsspalte ändert sich von nvarchar(16) zu nvarchar(32). |
| sys.dm_os_memory_cache_counters | Die folgenden Spalten wurden umbenannt: single_pages_kb ist jetzt: pages_kb mehrere Seiten kb ist jetzt: pages_in_use_kb |
| sys.dm_os_memory_cache_entries | Die Spalte pages_allocated_count wurde in pages_kb umbenannt. |
| sys.dm_os_memory_clerks | Die Spalte multi_pages_kb wurde entfernt. Die Spalte single_pages_kb wurde in 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: fremd_verpflichtet_kb |
| sys.dm_os_memory_objects | Die folgenden Spalten wurden umbenannt. Der Wert für „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: physikalischer_Speicher_kb bpool_commit_target ist jetzt: festgelegtes Ziel_kb bpool_visible ist jetzt: sichtbares_Ziel_kB virtual_memory_in_bytes ist jetzt: virtueller_Speicher_kb bpool_commited ist jetzt: committed_KB |
| sys.dm_os_workers | Die Gebietsschemaspalte wurde entfernt. |
Katalogansichten
| Ansehen | BESCHREIBUNG |
|---|---|
| sys.data_spaces sys.partition_schemes sys.filegroups sys.partition_functions |
Eine neue Spalte, is_system, wurde zu sys.data_spaces und sys.partition_functions hinzugefügt. (sys.partition_schemes und sys.filegroups erben die Spalten von sys.data_spaces.) Ein Wert von 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 aus diesen Katalogansichten zurückgegeben werden. |
SQL CLR-Datentypen (Geometrie, Geographie und Hierarchie-ID)
Die Assembly Microsoft.SqlServer.Types.dll, die die räumlichen Datentypen und den Hierarchie-ID-Typ enthält, wurde von Version 10.0 auf Version 11.0 aktualisiert. Benutzerdefinierte Anwendungen, die auf diese Assembly verweisen, können fehlschlagen, wenn die folgenden Bedingungen erfüllt sind.
Wenn Sie eine benutzerdefinierte Anwendung von einem Computer verschieben, auf dem SQL Server 2008 R2 auf einem Computer installiert wurde, 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 diese 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 in Version 11.0 verweisen und Version 10.0 ebenfalls installiert ist, wird möglicherweise diese Fehlermeldung angezeigt:
"System.InvalidCastException: Unable to cast object of type 'Microsoft.SqlServer.Types.SqlGeometry' to type 'Microsoft.SqlServer.Types.SqlGeometry'."Wenn Sie von einer benutzerdefinierten Anwendung auf die SqlTypes-Assembly Version 11.0 verweisen, die auf .NET 3.5, 4 oder 4.5 ausgerichtet ist, schlägt die Anwendung fehl, da sqlClient vom Entwurf die Version 10.0 der Assembly lädt. Dieser Fehler tritt auf, wenn die Anwendung eine der folgenden Methoden aufruft:
GetValueMethode derSqlDataReaderKlasseGetValuesMethode derSqlDataReaderKlasseKlammernindexoperator [] der
SqlDataReaderKlasseExecuteScalarMethode derSqlCommandKlasse
Sie können dieses Problem umgehen, indem Sie eine der folgenden Methoden verwenden:
Sie können dieses Problem in Ihrem Code umgehen, indem Sie die Methode anstelle der
GetSqlBytesoben aufgeführten Get-Methoden 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 die Assembly-Umleitung in der Anwendungskonfigurationsdatei verwenden, wie im folgenden Beispiel gezeigt:
<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 Ihrer Verbindungszeichenfolge umgehen, indem Sie einen Wert von "SQL Server 2012" für das Attribut "Type System Version" angeben, um sqlClient zum Laden von Version 11.0 der Assembly zu zwingen. Dieses Verbindungszeichenfolgen-Attribut ist nur in .NET 4.5 und höher verfügbar.
Das
assemblyBinding-Tag sollte innerhalb desruntime-Tags umschlossen werden.
Unterstützung für AWE
Die Unterstützung von 32-Bit-Adressfenstererweiterungen (Address Windowing Extensions, AWE) wird nicht mehr unterstützt. Dies kann zu einer langsameren Leistung auf 32-Bit-Betriebssystemen führen. Für Installationen, die große Speichermengen verwenden, migrieren Sie zu einem 64-Bit-Betriebssystem.
XQuery-Funktionen sind Surrogate-Aware
Die W3C-Empfehlung für XQuery-Funktionen und -Operatoren erfordert, dass sie ein Ersatzpaar zählen, das ein Unicode-Zeichen mit hohem Bereich als einzelne glyphe in UTF-16-Codierung darstellt. In Versionen von SQL Server vor SQL Server 2012 erkannten Zeichenfolgenfunktionen jedoch Ersatzpaare nicht als einzelnes Zeichen. Einige Zeichenfolgenvorgänge , z. B. Zeichenfolgenlängenberechnungen und Teilzeichenfolgenextraktionen, haben falsche Ergebnisse zurückgegeben. SQL Server 2012 unterstützt jetzt vollständig UTF-16 und die korrekte Behandlung von Ersatzpaaren.
Der XML-Datentyp in SQL Server lässt nur wohlgeformte Ersatzpaare zu. Einige Funktionen können jedoch unter bestimmten Umständen weiterhin nicht definierte oder unerwartete Ergebnisse zurückgeben, da es möglich ist, ungültige oder teilweise Ersatzpaare als Zeichenfolgenwerte an XQuery-Funktionen zu übergeben. Berücksichtigen Sie die folgenden Methoden zum Generieren von Zeichenfolgenwerten bei Verwendung von XQuery in SQL Server:
Geben Sie einen konstanten Zeichenfolgenwert als binären Wert an. Bei Verwendung dieser Methode ist es weiterhin möglich, ungültige oder teilweise Ersatzpaare zu übergeben.
Stellen Sie einen konstanten Zeichenfolgenwert bereit, indem Sie Zeichenentitäten bereitstellen. Bei Verwendung dieser Methode ist es nicht möglich, ungültige Surrogat-Paare zu übergeben. Die XQuery-Funktionen erfordern eine einzelne Zeichenentität für das hochwertige Zeichen. Diese Funktionen lösen einen Fehler aus, wenn die Zeichenentitäten für die Ersatzpaarzeichen 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 teilweise Ersatzpaare einzuführen.
Betroffene XQuery-Funktionen und -Operatoren
Die folgenden XQuery-Funktionen und -Operatoren behandeln jetzt UTF-16-Surrogate-Paare ordnungsgemäß in SQL Server 2012:
fn:string-length. Wenn jedoch ein ungültiges oder teilweises Ersatzpaar als Argument übergeben wird, wird das Verhalten der Zeichenfolgenlänge nicht definiert.
fn:substring.
fn:contains. Wenn jedoch ein partielles Ersatzpaar als Wert übergeben wird, kann unerwartete Ergebnisse zurückgegeben werden, da es das partielle Ersatzpaar finden kann, das in wohlgeformten Surrogatepaar enthalten ist.
fn:concat. Wenn jedoch ein partielles Ersatzpaar als Wert übergeben wird, kann verkettet falsche Surrogatpaare oder partielle Surrogatpaare erzeugen.
Vergleichsoperatoren und die ORDER BY-Klausel. Vergleichsoperatoren umfassen +, <, >, <=, >=,
eq,lt,gt,le, undge.
Verteilte Abfrageaufrufe an eine Systemprozedur
Verteilte Abfrageaufrufe OPENQUERY bis zu einigen Systemprozeduren schlagen fehl, wenn sie von einem SQL Server 2012-Server zu einem anderen aufgerufen werden. Dies tritt auf, wenn das Datenbankmodul keine Metadaten für eine Prozedur ermittelt. Beispiel: SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo').
Isolationsstufe und sp_reset_connection
Die Isolationsstufe für Verbindungen wird wie folgt von Clienttreibern behandelt:
Alle systemeigenen Treiber (SNAC, MDAC, ODBC) legen die Isolationsstufe (basierend auf der App-Einstellung) auf sp_reset_connection fest.
Für ADO.NET erhalten Sie im Wesentlichen eine zufällige Isolationsstufe, je nachdem, welche Verbindung Sie vom Pool erhalten (und wenn die Anwendung unterschiedliche Isolationsstufe verwendet). Da ADO.NET Pool Verbindungen intern und transparent wiederverwenden kann, können Sie nicht vorhersagen, was aus dem Pool kommt.
Für den DRIVER ERHALTEN Sie das gleiche Verhalten wie ADO.NET
Die Anwendung muss nach dem Öffnen der Verbindung immer die Isolationsstufe explizit festlegen, um das gewünschte Element zu erhalten.
Die JDBC-Verbindung kann gepoolt werden, sodass die Anwendung möglicherweise eine zufällige Isolationsstufe erhält und darüber nicht informiert ist.
Um die Abwärtskompatibilität beizubehalten, gilt dieses neue Verhalten nur für zuletzt verwendete Clients, beginnend mit TDS 7.4.
Abwärtskompatibilität
Neues Verhalten hängt von der Kompatibilitätsstufe ab
Die folgenden Funktionen und Operatoren veranschaulichen das oben beschriebene neue Verhalten nur, wenn die Kompatibilitätsstufe 110 oder höher ist:
fn:contains.
fn:concat.
Vergleichsoperatoren und ORDER BY-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, http://www.w3.org/2005/xpath-functionsd. h. . Wenn die Kompatibilitätsebene 110 oder höher ist, bindet SQL Server 2012 standardmäßig den Standardfunktionsnamespace an diesen Namespace. Diese Funktionen veranschaulichen jedoch das neue Verhalten, wenn dieser Namespace unabhängig von der Kompatibilitätsstufe verwendet wird.
fn:string-length
fn:substring
Unterbrechen von Änderungen in SQL Server 2008/SQL Server 2008R2
Dieser Abschnitt enthält die in SQL Server 2008 eingeführten wichtigen Änderungen. In SQL Server 2008 R2 wurden keine Änderungen eingeführt.
Sortierungen
| Merkmal | BESCHREIBUNG |
|---|---|
| Neue Sortierungen | SQL Server 2008 führt neue Sortierungen ein, die in voller Übereinstimmung mit den Sortierungen von Windows Server 2008 stehen. Diese 80 neuen Sortierungen haben eine verbesserte linguistische Genauigkeit und werden durch *_100-Versionsverweise gekennzeichnet. Wenn Sie eine neue Sortierung für Den Server oder die Datenbank auswählen, beachten Sie, dass die Sortierung möglicherweise von Clients mit älteren Clienttreibern nicht erkannt wird. Nicht erkannte Sortierungen können dazu führen, dass die Anwendung Fehler zurückgibt und fehlschlägt. Ziehen Sie die folgenden Lösungen in Betracht: Aktualisieren Sie das Clientbetriebssystem, um die zugrunde liegenden Systemkollationen zu aktualisieren. Wenn ihr Client Datenbankclientsoftware installiert hat, sollten Sie ein Dienstupdate auf die Datenbankclientsoftware anwenden. Wählen Sie eine vorhandene Sortierung aus, die einer Codeseite auf dem Client zugeordnet ist. |
Common Language Runtime (CLR)
| Merkmal | BESCHREIBUNG |
|---|---|
| CLR Assemblies | Wenn ein Upgrade einer Datenbank auf SQL Server 2008 erfolgt, wird die Microsoft.SqlServer.Types Assembly zur Unterstützung neuer Datentypen automatisch installiert. Regeln des Aktualisierungsberaters erkennen Benutzertypen oder Assemblys mit widersprüchlichen Namen. Der Upgraderatgeber empfiehlt die Umbenennung einer konfliktierenden Assembly und entweder das Umbenennen eines konfliktierenden Typs oder die Verwendung von zweiteiligen Namen im Code, um auf diesen vorhandenen Benutzertyp zu verweisen.Wenn ein Datenbankupgrade eine Benutzerassembly mit einem konfliktierenden Namen erkennt, wird diese Assembly automatisch umbenannt und die Datenbank in den verdächtigen Modus 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-Assemblies | SQL Server 2008 installiert .NET Framework 3.5 SP1, das Bibliotheken im globalen Assemblycache (GAC) aktualisiert. Wenn Sie nicht unterstützte Bibliotheken in einer SQL Server-Datenbank registriert haben, funktioniert Ihre SQL Server-Anwendung möglicherweise nach dem Upgrade auf SQL Server 2008 nicht mehr. Dies liegt daran, dass die Wartungs- oder Aktualisierungsbibliotheken im GAC keine Assemblys innerhalb von SQL Server aktualisieren. Wenn eine Assembly sowohl in einer SQL Server-Datenbank als auch in der GAC vorhanden ist, müssen die beiden Kopien der Assembly exakt übereinstimmen. Wenn sie nicht übereinstimmen, tritt ein Fehler auf, wenn die Assembly von der SQL Server CLR-Integration verwendet wird. Weitere Informationen finden Sie unter Unterstützte .NET Framework-Bibliotheken. Nach dem Upgrade Ihrer Datenbank oder Ihres Diensts aktualisieren Sie die Kopie der Assembly in Ihren SQL Server-Datenbanken mit der ALTER ASSEMBLY-Anweisung. Weitere Informationen finden Sie im Knowledge Base-Artikel 949080. Um zu ermitteln, ob Sie eine nicht unterstützte .NET Framework-Bibliothek in Ihrer Anwendung verwenden, führen Sie die folgende Abfrage in Ihrer Datenbank aus. SELECT name FROM sys.assemblies WHERE clr_name LIKE '%publickeytoken=b03f5f7f11d50a3a,%'; |
| CLR-Routinen | Die Verwendung des Identitätswechsels innerhalb von benutzerdefinierten CLR-Funktionen, benutzerdefinierten Aggregaten oder benutzerdefinierten Typen (UDTs) kann dazu führen, dass Ihre Anwendung nach dem Upgrade auf SQL Server 2008 mit Fehler 6522 ausfällt. Die folgenden Szenarien sind in SQL Server 2005 erfolgreich, schlagen jedoch in SQL Server 2008 fehl. Für jedes Szenario werden Lösungen bereitgestellt. Eine benutzerdefinierte CLR-Funktion, benutzerdefinierte Aggregat- oder UDT-Methode, die Identitätswechsel benutzt, verfügt über einen Parameter vom Typ nvarchar(max), varchar(max), varbinary(max), ntext, text, image oder einem großen UDT und hat nicht das Attribut DataAccessKind.Read an der Methode. Um dieses Problem zu beheben, fügen Sie das DataAccessKind.Read-Attribut der Methode hinzu, kompilieren Sie die Assembly, 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 DataAccessKind.Read-Attribut der Methode hinzu, kompilieren Sie die Assembly, und stellen Sie die Routine und die Assembly erneut bereit. Eine CLR-Tabellenwertfunktion mit einer FillRow-Methode, die Identitätstäuschung durchführt. Um dieses Problem zu beheben, entfernen Sie Impersonation aus der Methode FillRow. Greifen Sie nicht mithilfe der FillRow-Methode auf externe Ressourcen zu. Greifen Sie stattdessen über die Init-Methode auf externe Ressourcen zu. |
Dynamische Verwaltungssichten
| Ansehen | BESCHREIBUNG |
|---|---|
| sys.dm_os_sys_info | Die Spalten cpu_ticks_in_ms und sqlserver_start_time_cpu_ticks wurden entfernt. |
| 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 sich auf die Problembehandlung bei der Abfrageausführung auswirken. Weitere Informationen finden Sie unter sys.dm_exec_query_resource_semaphores (Transact-SQL). |
Fehler und Ereignisse
| Merkmal | BESCHREIBUNG |
|---|---|
| Anmeldefehler | In SQL Server 2005 wird 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 Fehler 18456 zurückgegeben. |
Anzeigenplan
| Merkmal | BESCHREIBUNG |
|---|---|
| Showplan-XML-Schema | Dem Showplan-XML-Schema wird ein neues SeekPredicateNew-Element hinzugefügt, und die eingeschlossene xsd-Sequenz (SqlPredicatesType) wird in ein <xsd:choice-Element> konvertiert. Anstelle eines oder mehrerer SeekPredicate-Elemente können jetzt ein oder mehrere SeekPredicateNew-Elemente im Showplan-XML erscheinen. Die beiden Elemente schließen sich gegenseitig aus. SeekPredicate wird im Showplan-XML-Schema zur Abwärtskompatibilität beibehalten; Abfragepläne, die in SQL Server 2008 erstellt wurden, können jedoch das SeekPredicateNew-Element enthalten. Anwendungen, die erwarten, dass nur das untergeordnete SeekPredicate-Element aus dem Knoten ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates abgerufen wird, 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 | Ein neues IndexKind-Attribut wird dem komplexen ObjectType-Typ im Showplan-XML-Schema hinzugefügt. Anwendungen, die SQL Server-Pläne streng anhand des SQL Server 2005-Schemas überprüfen, schlagen fehl. |
Transact-SQL
| Merkmal | BESCHREIBUNG |
|---|---|
| ALTER_AUTHORIZATION_DATABASE DDL-Ereignis | In SQL Server 2005, wenn das DDL-Ereignis ALTER_AUTHORIZATION_DATABASE ausgelöst wird, wird der Wert "object" im ObjectType-Element des EVENTDATA-XML-Dokuments für dieses Ereignis zurückgegeben, wenn die Entität des sicherungsfähigen Objekts im DDL-Vorgang (Data Definition Language) ein Objekt ist. In SQL Server 2008 wird der tatsächliche Typ (z. B. "Tabelle" oder "Funktion") zurückgegeben. |
| UMWANDELN | Wenn eine ungültige Formatvorlage an die CONVERT-Funktion übergeben wird, wird ein Fehler zurückgegeben, wenn der Typ der Konvertierung binär in Zeichen oder Zeichen in binär ist. In früheren Versionen von SQL Server wird der ungültige Stil auf den Standardstil für Binär-zu-Zeichen- und Zeichen-zu-Binär-Konvertierungen gesetzt. |
| GRANT/DENY/REVOKE EXECUTE für Assemblys | EXECUTE-Berechtigung kann nicht erteilt, verweigert oder für Assemblys widerrufen werden. Diese Berechtigung hat keine Auswirkungen und verursacht jetzt einen Fehler. Stattdessen die EXECUTE-Berechtigung für die gespeicherten Prozeduren oder Funktionen erteilen, verweigern oder widerrufen, die auf die Assemblymethode verweisen. |
| GRANT/DENY/REVOKE-Berechtigungen für Systemtypen | Berechtigungen können für Systemtypen nicht erteilt, verweigert oder widerrufen werden. In früheren Versionen von SQL Server sind diese Anweisungen erfolgreich, haben jedoch keine Auswirkung. In SQL Server 2008 wird ein Fehler zurückgegeben. |
| GRUPPIEREN NACH | Die GROUP BY-Klausel darf keine Unterabfrage in einem Ausdruck enthalten, der für die Gruppe nach Liste verwendet wird. In früheren Versionen von SQL Server war dies zulässig. In SQL Server 2008 wird Fehler 144 zurückgegeben. Der folgende Code ist beispielsweise in SQL Server 2005 erfolgreich und schlägt in SQL Server 2008 fehl. 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 ein nicht bestimmtes Verhalten zu verhindern, kann die OUTPUT-Klausel nicht auf eine Spalte aus einer Ansicht oder inlinetabellenwertfunktion verweisen, wenn diese Spalte durch eine der folgenden Methoden definiert wird: Eine Unterabfrage. Eine benutzerdefinierte Funktion, die den Zugriff auf Benutzer- oder Systemdaten durchführt oder davon ausgegangen wird, dass ein solcher Zugriff ausgeführt wird. Eine berechnete Spalte, die in der Definition eine benutzerdefinierte Funktion enthält, die den Benutzer- oder Systemdatenzugriff ausführt. Wenn SQL Server eine solche Spalte in der OUTPUT-Klausel erkennt, wird Fehler 4186 ausgelöst. Weitere Informationen finden Sie unter MSSQLSERVER_4186. |
| OUTPUT INTO-Klausel | Die Zieltabelle der OUTPUT INTO-Klausel kann keine aktivierten Trigger enthalten. |
| Precompute rank server-level option | Diese Option wird in SQL Server 2008 nicht unterstützt. Ändern Sie Anwendungen, die dieses Feature derzeit so schnell wie möglich verwenden. |
| READPAST-Tabellenhinweis | Sie können den READPAST-Hinweis nicht unter "Snapshot Isolation" angeben. Der READPAST-Hinweis wird ignoriert, wenn entweder die READ_COMMITED_SNAPSHOT- oder ALLOW_SNAPSHOT_ISOLATION Datenbankoption auf EIN festgelegt ist. Wenn Sie jedoch den READPAST-Hinweis mit READCOMMITTEDLOCK kombinieren, entspricht das READPAST-Verhalten dem blockierenden READCOMMITTED-Hinweis. |
| sp_helpuser | Die folgenden Spaltennamen, die im Resultset der gespeicherten sp_helpuser gespeicherten Prozedur zurückgegeben werden, wurden geändert: GroupName ist jetzt: Rollenname Group_name ist jetzt: Rollenname Group_id ist jetzt: Role_id Users_in_group ist jetzt: Benutzer_in_Rolle |
| Transparente Datenverschlüsselung | Transparente Datenverschlüsselung (TDE) wird auf E/A-Ebene ausgeführt: Die Seitenstruktur ist im Arbeitsspeicher unverschlüsselt und wird nur verschlüsselt, wenn die Seite auf den Datenträger geschrieben wird. Sowohl die Datenbankdateien als auch protokolldateien werden verschlüsselt. Anwendungen von Drittanbietern, 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
| Merkmal | 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 ein standardkonformes Verhalten, was zu den folgenden Änderungen führt:Werte ohne Zeitzone werden überprüft. Die bereitgestellte Zeitzone oder das Fehlen einer Zeitzone wird beibehalten. Die interne Speicherdarstellung wird geändert. Die Auflösung gespeicherter Werte wird erhöht. Negative Jahre sind unzulä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 beispielsweise 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 unzulässig, da sie nicht den XML-Standards entspricht. Fehler 9341 wird zurückgegeben. Entfernen Sie den führenden Doppelpunkt oder geben Sie ein Präfix für den Testnamen an, z. B. (n$/CTR02) oder (n$/p1:CTR02). |
Verbinden
| Merkmal | BESCHREIBUNG |
|---|---|
| Herstellen einer Verbindung von SQL Server Native Client mithilfe von SSL | Bei der Verbindung mit SQL Server Native Client verwenden Anwendungen, die "SERVER=shortname; FORCE ENCRYPTION=true" zusammen mit einem Zertifikat nutzen, dessen Antragsteller vollqualifizierte Domänennamen (FQDN) angeben, wobei sie sich in der Vergangenheit aufgrund einer entspannten Validierung verbunden haben. SQL Server 2008 R2 verbessert die Sicherheit, indem FQDN-Subjekte für Zertifikate erzwungen werden. Anwendungen, die auf eine entspannte Überprüfung angewiesen sind, müssen eine der folgenden Aktionen ausführen: Verwenden Sie den FQDN in der Verbindungszeichenfolge. -Diese Option erfordert keine erneute Kompilierung der Anwendung, wenn das SERVER-Schlüsselwort der Verbindungszeichenfolge außerhalb der Anwendung konfiguriert ist. -Diese Option funktioniert nicht für Anwendungen, die ihre Verbindungszeichenfolgen hartcodiert haben. -Diese Option funktioniert nicht für Anwendungen, die Datenbankspiegelung verwenden, da der gespiegelte Server mit einem einfachen Namen antwortet. |
| Fügen Sie einen Alias für den Kurznamen hinzu, der dem FQDN zugeordnet werden soll. -Diese Option funktioniert auch für Anwendungen, die ihre Verbindungszeichenfolgen hartcodiert haben. -Diese Option funktioniert nicht für Anwendungen, die Datenbankspiegelung verwenden, da die Anbieter keine Aliase für empfangene Failoverpartnernamen nachschlagen. |
|
| Lassen Sie ein Zertifikat für Kurznamen ausstellen. -Diese Option funktioniert für alle Anwendungen. |
Unterbrechen von Änderungen in SQL Server 2005
Wir sammeln und speichern Dokumentationen für sehr alte Versionen von Microsoft SQL Server in einer Reihe von Archivwebseiten . Die archivierten Webseiten werden nicht von Suchmaschinen wie Bing.com und Google.com verarbeitet. Aber Sie können diese Archive in unseren Dokumenten 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
Die SQL Server 2014-Dokumentation wurde archiviert und wird nicht mehr von Suchmaschinen verarbeitet. Die Artikel von 2014 werden jetzt mit NOINDEX und NOFOLLOW markiert.
Die neueste Version von SQL Server zusammen mit anderen aktuellen Versionen ist hier dokumentiert.
Siehe auch
Als veraltet markierte Features der Datenbank-Engine in SQL Server 2014
Verhaltensänderungen in Funktionen des Datenbankmoduls in SQL Server 2014
Nicht mehr vorhandene Datenbankmodulfunktionalität in SQL Server 2014
Abwärtskompatibilität der SQL Server-Datenbank-Engine
ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL)
Unterbrechen von Änderungen an Verwaltungstools-Features in SQL Server 2014