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.
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.
|
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.
|
||||||||||||
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.
|
||||||||||||
sys.dm_os_memory_objects |
Die folgenden Spalten wurden umbenannt.
|
||||||||||||
sys.dm_os_sys_info |
Die folgenden Spalten wurden umbenannt.
|
||||||||||||
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
Zurü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:
|
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.
|
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.
|
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.
|
||||||||||
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:
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.
|
||||||||||
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:
Ä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.
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:
|
Zurü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)