Fehlerhafte Änderungen an Funktionen des Datenbankmoduls in SQL Server 2012

In diesem Thema werden aktuelle Änderungen in SQL Server 2012 Database Engine (Datenbankmodul) und den 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 Server basieren. Diese Probleme können nach einem Upgrade auftreten. Weitere Informationen finden Sie unter Verwenden von Upgrade Advisor zur Vorbereitung auf Upgrades.

In diesem Thema

Aktuelle Änderungen in SQL Server 2012

Aktuelle Änderungen in SQL Server 2008/SQL Server 2008 R2

Aktuelle Änderungen in SQL Server 2005

Aktuelle Änderungen in SQL Server 2012

Transact-SQL

Funktion

Beschreibung

Auswählen aus Spalten oder Tabellen mit Namensteil NEXT

In Sequenzen wird die ANSI-Standardfunktion NEXT VALUE FOR verwendet. Wenn der Name einer Tabelle oder Spalte den Namensteil NEXT aufweist, für die Tabelle oder Spalte als Alias VALUE verwendet wird und das ANSI-Standardschlüsselwort AS weggelassen 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

Zur Unterstützung von benutzerdefinierten Überwachungsereignissen wurden zwei zusätzliche Spalten (user_defined_event_id und user_defined_information) hinzugefügt. 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.

CAST- und CONVERT-Vorgänge in berechneten Spalten des Typs time oder datetime2

In früheren Versionen von SQL Server ist das Standardformat für CAST- und CONVERT-Vorgänge bei den Datentypen time und datetime2 121, sofern keiner der Typen im Ausdruck einer berechneten Spalte 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. Bei Angabe eines Tabellennamens mit den folgenden Formaten tritt zur Kompilierzeit nun Fehler 117 auf.

  • 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 Database Engine (Datenbankmodul) konsistent das Token TDS DONE mit „RowCount: 0“ an Clients, wenn bei einer DML-Anweisung ein Fehler auftritt. In früheren Versionen von SQL Server wird ein falscher Wert von -1 an den Client gesendet, wenn die DML-Anweisung, bei der ein Fehler auftritt, in einem TRY-CATCH-Block enthalten ist und entweder von Database Engine (Datenbankmodul) automatisch parametrisiert wird oder sich der TRY-CATCH-Block nicht auf der gleichen Ebene wie die fehlgeschlagene Anweisung befindet. 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")

Installierte Produktedition der Instanz von SQL Server 2012. 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.

Abhängig von der installierten Enterprise-Edition kann „Enterprise Edition“ oder „Enterprise Edition: Core-basierte Lizenzierung“ zurückgegeben werden. Die Enterprise-Editionen unterscheiden sich anhand der maximalen Rechenkapazität, die von einer einzelnen SQL Server-Instanz genutzt wird. Weitere Informationen zu Rechenkapazitätsgrenzen in SQL Server 2012 finden Sie unter Rechenkapazitätsgrenzen von bestimmten Editionen von SQL Server.

CREATE LOGIN

Die CREATE LOGIN WITH PASSWORD = 'password' HASHED-Option kann nicht mit Hashes verwendet werden, die in SQL Server 7 oder einer früheren Version 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);

SET ROWCOUNT

Das Verhalten von SET ROWCOUNT wurde geändert, um die Effizienz einiger häufig durchgeführter Abfragen zu erhöhen. Dies kann sich auf die Abfragepläne für die Kompatibilitätsebenen 110 und höher auswirken. Das Ergebnis kann ein Fehler sein, wenn die SET ROWCOUNT-Anweisung den Wert ROWCOUNT nach einer DECLARE CURSOR-Anweisung und vor einer FETCH-Anweisung auf 0 oder von 0 auf einen anderen Wert ändert. Setzen Sie die Datenbankkompatibilitätsebene auf 100, oder setzen Sie die ROWCOUNT-Anweisung außerhalb der Cursoranweisungen, um diesen Fehler zu vermeiden.

Dynamische Verwaltungssichten

ansicht

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.

Name der vorherigen Spalte

Name der neuen Spalte

single_pages_kb

pages_kb

multi_pages_kb

pages_in_use_kb

sys.dm_os_memory_cache_entries

Die pages_allocated_count-Spalte wurde in pages_kb umbenannt.

sys.dm_os_memory_clerks

Die Spalte multi_pages_kb wurde entfernt.

Die single_pages_kb-Spalte wurde in pages_kb umbenannt.

sys.dm_os_memory_nodes

Die folgenden Spalten wurden umbenannt.

Name der vorherigen Spalte

Name der neuen Spalte

single_pages_kb

pages_kb

multi_pages_kb

foreign_committed_kb

sys.dm_os_memory_objects

Die folgenden Spalten wurden umbenannt.

Name der vorherigen Spalte

Name der neuen Spalte

pages_allocated_count

pages_in_bytes

max_pages_allocated_count

max_pages_in_bytes

sys.dm_os_sys_info

Die folgenden Spalten wurden umbenannt.

Name der vorherigen Spalte

Name der neuen Spalte

physical_memory_in_bytes

physical_memory_kb

bpool_commit_target

committed_target_kb

bpool_visible

visible_target_kb

virtual_memory_in_bytes

virtual_memory_kb

bpool_commited

committed_kb

sys.dm_os_workers

Die Spalte "locale" wurde entfernt.

Katalogsichten

ansicht

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 räumliche 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 2012 installiert ist, schlägt die Anwendung fehl, da die referenzierte Version 10.0 der Assembly SqlTypes 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 Version 11.0 der Assembly SqlTypes verweisen und Version 10.0 ebenfalls installiert ist, wird möglicherweise 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 Version 11.0 der Assembly SqlTypes über eine benutzerdefinierte Anwendung mit dem Ziel .NET 3.5, 4 oder 4.5 verweisen, schlägt die Anwendung fehl, da SqlClient so konzipiert ist, dass Version 10.0 der Assembly geladen wird. Dieser Fehler tritt auf, wenn die Anwendung eine der folgenden Methoden aufruft:

    • GetValue-Methode der SqlDataReader-Klasse

    • GetValues-Methode der SqlDataReader-Klasse

    • Klammerindexoperator [] der SqlDataReader-Klasse

    • ExecuteScalar-Methode der SqlCommand-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. Hierzu ein Beispiel:

    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 dem runtime-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 Ersatzzeichenpaare jedoch nicht als einzelnes Zeichen. Einige Zeichenfolgenvorgänge wie Berechnungen zur Zeichenfolgenlänge und Extraktionen von Teilzeichenfolgen gaben falsche Ergebnisse zurück. SQL Server 2012 unterstützt jetzt vollständig UTF-16 sowie die richtige Verarbeitung von Ersatzzeichenpaaren.

Der XML-Datentyp in SQL Server lässt nur wohlgeformte Ersatzzeichenpaare 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. Ziehen Sie die folgenden Methoden zum Generieren von Zeichenfolgenwerten in Betracht, 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, indem Sie sql:column oder sql:variableverwenden. 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 verarbeiten jetzt UTF-16-Ersatzzeichenpaare ordnungsgemäß in SQL Server 2012:

  • fn:string-length. Wenn allerdings ein ungültiges oder partielles Ersatzzeichenpaar als Argument übergeben wird, ist das Verhalten von string-length nicht definiert.

  • fn:substring.

  • fn:contains. Wird ein partielles Ersatzzeichenpaar als Wert übergeben, gibt contains möglicherweise unerwartete Ergebnisse zurück, da in diesem Fall u. U. das partielle Ersatzzeichenpaar in einem wohlgeformten Ersatzzeichenpaar enthalten ist.

  • fn:concat. Wird ein partielles Ersatzzeichenpaar als Wert übergeben, kann concat falsche Ersatzzeichenpaare oder partielle Ersatzzeichenpaare erzeugen.

  • Vergleichsoperatoren und die Klausel order by. Zu den Vergleichsoperatoren zählen +, <, >, <=, >=, eq, lt, gt, le und ge.

Aufrufe von verteilten Abfragen an eine Systemprozedur

Aufrufe von verteilten Abfragen über OPENQUERY an einige Systemprozeduren schlagen fehl, wenn sie von einem -Server für einen anderen aufgerufen werden. Dies tritt auf, wenn der Database Engine (Datenbankmodul) keine Metadaten für eine Prozedur feststellen kann. Beispiel: SELECT * FROM OPENQUERY(..., 'EXEC xp_loginfo').

Abwärtskompatibilität

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 die Klausel order by

Neues Verhalten hängt vom Standardnamespace-URI für Funktionen ab

Die folgenden Funktionen zeigen das neue oben beschriebene Verhalten nur, wenn der Standardnamespace-URI dem Namespace in der finalen Empfehlung entspricht, also http://www.w3.org/2005/xpath-functions. Wenn der Kompatibilitätsgrad mindestens 110 ist, bindet SQL Server 2012 den Standardfunktionsnamespace standardmäßig an diesen Namespace. Diese Funktionen zeigen das neue Verhalten, wenn dieser Namespace unabhängig vom Kompatibilitätsgrad verwendet wird.

  • fn:string-length

  • fn:substring

Pfeilsymbol, dass mit dem Link "Zurück zum Anfang" verwendet wirdZurück zum Anfang

Aktuelle Änderungen in SQL Server 2008/SQL Server 2008 R2

Dieser Abschnitt enthält die in SQL Server 2008 eingeführten wichtigen Änderungen. In SQL Server 2008 R2 wurden keine Änderungen eingeführt.

Sortierungen

Funktion

Beschreibung

Neue Sortierungen

In SQL Server 2008 werden neue Sortierungen eingeführt, die vollständig an die Sortierungen von Windows Server 2008 angepasst 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 (Global Assembly Cache, GAC) aktualisiert werden. Wenn die SQL Server-Datenbank nicht unterstützte Bibliotheken enthält, kann die SQL Server-Anwendung nach einem Upgrade auf SQL Server 2008 möglicherweise nicht mehr verwendet werden. Das liegt daran, dass durch Warten oder Aktualisieren von Bibliotheken im GAC die entsprechenden Assemblys in SQL Server nicht aktualisiert werden. Wenn eine Assembly sowohl in einer SQL Server-Datenbank als auch im GAC vorhanden ist, müssen die beiden Kopien der Assembly genau übereinstimmen. Stimmen sie nicht überein, 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.

Bedienen oder aktualisieren Sie nach dem Upgrade der Datenbank die Kopie der Assembly in den SQL Server-Datenbanken mit der ALTER ASSEMBLY-Anweisung. 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

Durch Identitätswechsel innerhalb der benutzerdefinierten CLR-Funktionen, benutzerdefinierten Aggregate oder benutzerdefinierten Typen (User-Defined Types, UDTs) können kann nach dem Upgrade auf SQL Server 2008 bei der Anwendung der Fehler 6522 auftreten.

Die folgenden Szenarios können in SQL Server 2005 erfolgreich ausgeführt werden, nicht jedoch in SQL Server 2008. Für jedes Szenario werden Auflösungen bereitgestellt.

  1. Benutzerdefinierte CLR-Funktionen, benutzerdefinierte Aggregate oder UDT-Methoden, für die Identitätswechsel verwendet werden, besitzen einen Parameter vom Typ nvarchar(max), varchar(max), varbinary(max), ntext, text, image oder einen umfangreichen UDT, nicht jedoch das DataAccessKind.Read-Attribut für die Methode.

    Um dieses Problem zu beheben, fügen Sie das DataAccessKind.Read-Attribut der Methode hinzu, kompilieren Sie die Assembly erneut, und stellen Sie die Routine und die Assembly erneut bereit.

  2. Eine CLR-Tabellenwertfunktion, die über eine Init-Methode verfügt, die Identitätswechsel ausführt.

    Um dieses Problem zu beheben, fügen Sie das DataAccessKind.Read-Attribut der Methode hinzu, kompilieren Sie die Assembly erneut, und stellen Sie die Routine und die Assembly erneut bereit.

  3. Eine CLR-Tabellenwertfunktion, die über eine FillRow-Methode verfügt, die Identitätswechsel ausführt.

    Um dieses Problem zu beheben, entfernen Sie den Identitätswechsel aus der FillRow-Methode. Greifen Sie mit der FillRow-Methode nicht auf externe Ressourcen zu. Greifen Sie auf externe Ressourcen stattdessen mit der Init-Methode zu.

Dynamische Verwaltungssichten

ansicht

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_semaphores sys.dm_exec_query_memory_grants

Die resource_semaphore_id-Spalte 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 versucht wird, mit einem SQL-Anmeldenamen eine Verbindung zu einem Server herzustellen, der nur die Windows-Authentifizierung verwendet. In SQL Server 2008 wird stattdessen der Fehler 18456 zurückgegeben.

Showplan

Funktion

Beschreibung

Showplan (XML-Schema)

Ein neues SeekPredicateNew-Element wird dem Showplan-XML-Schema hinzugefügt, und die einschließende XSD-Sequenz (SqlPredicatesType) wird in ein <xsd:choice>-Element konvertiert. Anstelle von einem oder mehreren SeekPredicate-Elementen werden nun eines oder mehrere SeekPredicateNew-Elemente für Showplan XML angezeigt Die beiden Elemente schließen sich gegenseitig aus. SeekPredicate wird im Showplan-XML-Schema für die Rückwärtskompatibilität angezeigt; Abfragepläne, die in SQL Server 2008 erstellt wurden, enthalten jedoch möglicherweise das SeekPredicateNew-Element. Anwendungen, die nur das untergeordnete SeekPredicate-Element aus dem Knoten ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/RelOp/IndexScan/SeekPredicates abrufen sollen, können möglicherweise nicht ordnungsgemäß ausgeführt werden, wenn SeekPredicate nicht vorhanden ist. Schreiben Sie die Anwendung um, so dass entweder das SeekPredicate-Element oder das SeekPredicateNew-Element für diesen Knoten abgerufen wird. Weitere Informationen finden Sie in den entsprechenden Themen.

Showplan (XML-Schema)

Dem komplexen ObjectType-Typ wird im Showplan-XML-Schema ein neues IndexKind-Attribut hinzugefügt. Anwendungen, die eine strenge Validierung von SQL Server-Plänen anhand des SQL Server 2005-Schemas durchführen, generieren einen Fehler.

Transact-SQL

Funktion

Beschreibung

ALTER_AUTHORIZATION_DATABASE DDL-Ereignis

Wenn das DDL-Ereignis ALTER_AUTHORIZATION_DATABASE in SQL Server 2005 ausgelöst wird, wird der Wert "object" im ObjectType-Element der XML-Daten von EVENTDATA für das Ereignis zurückgegeben, wenn der Entitätstyp des sicherungsfähigen Elements im DDL-Vorgang (Data Definition Language, Datendefinitionssprache) ein Objekt darstellt. 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 wurde das ungültige Format bei Konvertierungen vom Binärformat ins Zeichenformat oder vom Zeichenformat ins Binärformat auf das Standardformat 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. Diese Anweisungen können in früheren Versionen von SQL Server zwar erfolgreich ausgeführt werden; sie haben jedoch 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 älteren Versionen von SQL Server war dies noch zulässig. In SQL Server 2008 wird der 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.

precompute rank-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 gespeicherten Prozedur sp_helpuser zurückgegeben werden, wurden geändert.

Vorheriger Spaltenname

Neuer Spaltenname

GroupName

RoleName

Group_name

Role_name

Group_id

Role_id

Users_in_group

Users_in_role

Transparente Datenverschlüsselung

Die transparente Datenverschlüsselung (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. Anwendungen von Drittanbietern, die den regulären Seitenzugriffsmechanismus von SQL Server umgehen, beispielsweise durch direktes Scannen der Daten- oder Protokolldateien), generieren einen Fehler, wenn TDE in einer Datenbank verwendet wird, da die Daten in den Dateien verschlüsselt sind. In diesen Fällen kann mithilfe der Windows-Kryptografie-API eine Lösung zum Entschlüsseln der Daten außerhalb von SQL Server für die Anwendungen entwickelt werden.

XQuery

Funktion

Beschreibung

Datetime-Unterstützung

Die Datentypen xs:time, xs:date und xs:dateTime in SQL Server 2005 unterstützen keine Zeitzonen. Zeitzonendaten werden der UTC-Zeitzone zugeordnet. SQL Server 2008 stellt standardkonformes Verhalten bereit. Dies führt zu folgenden Änderungen:

  • 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.

Ändern Sie Anwendungen und XQuery-Ausdrücke gemäß den Anforderungen der neuen Typwerte.

XQuery und Xpath-Ausdrücke

In SQL Server 2005 sind Schritte in einem XQuery-Ausdruck oder einem 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).

Connecting

Funktion

Beschreibung

Herstellen einer Verbindung von SQL Server Native Client mithilfe von SSL

Aufgrund der weniger strengen Überprüfung wurde in der Vergangenheit für Anwendungen, die "SERVER=shortname; FORCE ENCRYPTION=true" mit Zertifikat verwendeten, in dessen Betreff vollqualifizierte Domänennamen (FQDNs) enthalten waren, eine Verbindung mit SQL Server Native Client hergestellt. 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 kein Neukompilieren der Anwendung, wenn das SERVER-Schlüsselwort der Verbindungszeichenfolge außerhalb der Anwendung konfiguriert wird.

    • Diese Option funktioniert nicht für Anwendungen, deren Verbindungszeichenfolgen hart codiert sind.

    • Diese Option funktioniert nicht für Anwendungen, 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 sogar für Anwendungen, deren Verbindungszeichenfolgen hart codiert sind.

    • Diese Option funktioniert nicht für Anwendungen, die Datenbankspiegelung verwenden, da die Anbieter keine Aliase für empfangene Namen von Failoverpartnern suchen.

  • Für den Kurznamen muss ein Zertifikat ausgestellt werden.

    • Diese Option funktioniert für alle Anwendungen.

Pfeilsymbol, dass mit dem Link "Zurück zum Anfang" verwendet wirdZurück zum Anfang

Aktuelle Änderungen in SQL Server 2005

Eine Liste mit aktuellen Änderungen, die in SQL Server 2005 eingeführt wurden, finden Sie unter Aktuelle Änderungen zu Datenbankmodulfunktionen in SQL Server 2005.

Siehe auch

Verweis

Als veraltet markierte Funktionen des Datenbankmoduls in SQL Server 2012

Verhaltensänderungen von Datenbankmodul-Funktionen in SQL Server 2012

Nicht mehr unterstützte Datenbankmodul-Funktionalität in SQL Server 2012

ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL)

Andere Ressourcen

Abwärtskompatibilität des SQL Server-Datenbankmoduls