Verhaltensänderungen von Datenbank-Engine-Funktionen in SQL Server 2014
In diesem Thema werden Verhaltensänderungen in der Datenbank-Engine beschrieben. Verhaltensänderungen wirken sich auf die Funktionsweise oder Interaktion von Features in SQL Server 2014 im Vergleich zu früheren Versionen von SQL Server aus.
Verhaltensänderungen in SQL Server 2014
In früheren Versionen von SQL Server können Abfragen für ein XML-Dokument, das Zeichenfolgen über eine bestimmte Länge (mehr als 4020 Zeichen) enthält, falsche Ergebnisse zurückgeben. In SQL Server 2014 geben solche Abfragen die richtigen Ergebnisse zurück.
Verändertes Programmverhalten in SQL Server 2012
Metadatenermittlung
Verbesserungen in Datenbank-Engine ab SQL Server 2012 ermöglichen SQLDescribeCol das Abrufen genauerer Beschreibungen der erwarteten Ergebnisse als die von SQLDescribeCol in früheren Versionen von SQL Server zurückgegebenen Ergebnisse. Weitere Informationen finden Sie unter Metadatenermittlung.
Die SET FMTONLY-Option zum Bestimmen des Antwortformats, ohne dass die Abfrage tatsächlich ausgeführt wird, wird durch sp_describe_first_result_set (Transact-SQL), sp_describe_undeclared_parameters (Transact-SQL), sys.dm_exec_describe_first_result_set (Transact-SQL) und sys.dm_exec_describe_first_result_set_for_object (Transact-SQL) ersetzt.
Änderungen am Verhalten bei der Skripterstellung eines SQL Server-Agent-Tasks
Wenn Sie ab SQL Server 2012 einen neuen Auftrag erstellen, indem Sie das Skript aus einem vorhandenen Auftrag kopieren, wirkt sich der neue Auftrag möglicherweise versehentlich auf den vorhandenen Auftrag aus. Um einen neuen Auftrag mithilfe des Skripts aus einem vorhandenen Auftrag zu erstellen, löschen Sie manuell den Parameter @schedule_uid der normalerweise der letzte Parameter des Abschnitts ist, der den Auftragszeitplan im vorhandenen Auftrag erstellt. Dadurch wird ein neuer und unabhängiger Zeitplan für den neuen Auftrag ohne Auswirkungen auf die vorhandenen Aufträge erstellt.
Reduktion konstanter Ausdrücke für benutzerdefinierte CLR-Funktionen und -Methoden
Ab SQL Server 2012 sind die folgenden benutzerdefinierten CLR-Objekte jetzt faltbar:
- Benutzerdefinierte CLR-Funktionen mit deterministischen Skalarwerten.
- Deterministische Methoden benutzerdefinierter CLR-Typen.
Diese Neuerung zielt auf die Verbesserung der Leistung ab, wenn diese Funktionen oder Methoden mehr als einmal mit den gleichen Argumenten aufgerufen werden. Diese Änderung verursacht jedoch möglicherweise unerwartete Ergebnisse, wenn nichtdeterministische Funktionen oder Methoden fehlerhaft als deterministisch markiert wurden. Der Determinismus einer CLR-Funktion oder Methode wird vom Wert der IsDeterministic
-Eigenschaft vom SqlFunctionAttribute
oder SqlMethodAttribute
angegeben.
Verhalten der STEnvelope()-Methode wurde mit leeren räumlichen Typen geändert
Das Verhalten der STEnvelope
Methode mit leeren Objekten ist jetzt konsistent mit dem Verhalten anderer SQL Server räumlichen Methoden.
In SQL Server 2008 hat die STEnvelope
Methode die folgenden Ergebnisse zurückgegeben, wenn sie mit leeren Objekten aufgerufen wird:
SELECT geometry::Parse('POINT EMPTY').STEnvelope().ToString()
-- returns POINT EMPTY
SELECT geometry::Parse('LINESTRING EMPTY').STEnvelope().ToString()
-- returns LINESTRING EMPTY
SELECT geometry::Parse('POLYGON EMPTY').STEnvelope().ToString()
-- returns POLYGON EMPTY
In SQL Server 2012 gibt die STEnvelope
Methode nun die folgenden Ergebnisse zurück, wenn sie mit leeren Objekten aufgerufen wird:
SELECT geometry::Parse('POINT EMPTY').STEnvelope().ToString()
-- returns GEOMETRYCOLLECTION EMPTY
SELECT geometry::Parse('LINESTRING EMPTY').STEnvelope().ToString()
-- returns GEOMETRYCOLLECTION EMPTY
SELECT geometry::Parse('POLYGON EMPTY').STEnvelope().ToString()
-- returns GEOMETRYCOLLECTION EMPTY
Um zu bestimmen, ob ein räumliches Objekt leer ist, rufen Sie die METHODE STIsEmpty (geometry Data Type) auf.
LOG-Funktion verfügt über neue optionale Parameter
Die LOG
Funktion verfügt jetzt über einen optionalen Basisparameter . Weitere Informationen finden Sie unter LOG (Transact-SQL)..
Das Berechnen von Statistiken hat sich während der Vorgänge für partitionierte Indizes geändert
In SQL Server 2014 werden Statistiken nicht erstellt, indem alle Zeilen in der Tabelle überprüft werden, wenn ein partitioniertes Index erstellt oder neu erstellt wird. Der Abfrageoptimierer generiert stattdessen Statistiken mithilfe des Standardalgorithmus zur Stichprobenentnahme. Nachdem eine Datenbank mit partitionierten Indizes aktualisiert wurde, bemerken Sie möglicherweise einen Unterschied in den Histogrammdaten für diese Indizes. Diese Änderung des Verhaltens beeinträchtigt die Abfrageleistung möglicherweise nicht. Um Statistiken zu partitionierten Indizes durch das Scannen aller Zeilen in der Tabelle abzurufen, verwenden Sie CREATE STATISTICS
oder UPDATE STATISTICS
mit der FULLSCAN
-Klausel.
Die Datentypkonvertierung durch die XML-Wert Methode hat sich geändert
Das interne Verhalten der value
-Methode des xml
-Datentyps hat sich geändert. Diese Methode führt eine XQuery für den XML-Code aus und gibt einen skalaren Wert des angegebenen SQL Server Datentyps zurück. Der xs-Typ muss in den datentyp SQL Server konvertiert werden. Zuvor hat die value
Methode den Quellwert intern in eine xs:string konvertiert und dann den xs:string in den SQL Server-Datentyp konvertiert. In SQL Server 2014 wird die Konvertierung in xs:string in den folgenden Fällen übersprungen:
Quell-XS-Datentyp | Ziel-SQL Server-Datentyp |
---|---|
byte short INT integer long unsignedByte unsignedShort unsignedInt unsignedLong positiveInteger nonPositiveInteger negativeInteger nonNegativeInteger |
TINYINT SMALLINT INT BIGINT Decimal NUMERIC |
Decimal | Decimal NUMERIC |
float | real |
double | float |
Das neue Verhalten verbessert die Leistung, wenn die Zwischenkonvertierung übersprungen werden kann. Wenn bei Datentypkonvertierungen jedoch Fehler auftreten, werden andere Fehlermeldungen angezeigt, als dies beim Konvertieren vom dazwischenliegenden xs:-Zeichenfolgen-Wert der Fall wäre. Wenn die Wertmethode beispielsweise den int
-Wert "100000" nicht in einen smallint
konvertiert hat, lautete die vorherige Fehlermeldung:
The conversion of the nvarchar value '100000' overflowed an INT2 column. Use a larger integer column.
In SQL Server 2014 lautet die Fehlermeldung ohne die Zwischenkonvertierung in xs:string:
Arithmetic overflow error converting expression to data type smallint.
sqlcmd.exe-Verhaltensänderung im XML-Modus
Es gibt Verhaltensänderungen, wenn Sie sqlcmd.exe mit dem XML-Modus (:XML ON-Befehl) verwenden, wenn Sie ein SELECT * aus T FOR XML ausführen.
Meldung "DBCC CHECKIDENT Revised" (DBCC CHECKIDENT überarbeitet)
In SQL Server 2012 hat sich die vom DBCC CHECKIDENT-Befehl zurückgegebene Nachricht nur geändert, wenn sie mit RESEED new_reseed_value verwendet wird, um den aktuellen Identitätswert zu ändern. Die neue Meldung lautet "Überprüfen von Identitätsinformationen: aktueller Identitätswert "<aktueller Identitätswert>". Die DBCC-Ausführung wurde abgeschlossen. Falls DBCC Fehlermeldungen ausgegeben hat, wenden Sie sich an den Systemadministrator."
In früheren Versionen lautet die Meldung "Überprüfen von Identitätsinformationen: aktueller Identitätswert "<aktueller Identitätswert>", aktueller Spaltenwert "aktueller Spaltenwert>"<. DBCC-Ausführung abgeschlossen. Wenn DBCC Fehlermeldungen ausgegeben hat, wenden Sie sich an Ihren Systemadministrator." Die Nachricht ist unverändert, wenn DBCC CHECKIDENT
mit NORESEED
angegeben wird, ohne einen zweiten Parameter oder ohne einen erneuten Wert. Weitere Informationen finden Sie unter DBCC CHECKIDENT (Transact-SQL).
Verhalten der exist()-Funktion auf dem XML-Datentyp hat sich geändert
Das Verhalten der exist()
Funktion hat sich geändert, wenn ein XML-Datentyp mit einem NULL-Wert mit 0 (null) verglichen wird. Betrachten Sie das folgenden Beispiel:
DECLARE @test XML;
SET @test = null;
SELECT COUNT(1) WHERE @test.exist('/dogs') = 0;
In früheren Versionen wurde bei diesem Vergleich "1" (true) zurückgegeben, jetzt wird stattdessen "0" (null, false) zurückgegeben.
Die folgenden Vergleiche haben sich nicht geändert:
DECLARE @test XML;
SET @test = null;
SELECT COUNT(1) WHERE @test.exist('/dogs') = 1; -- 0 expected, 0 returned
SELECT COUNT(1) WHERE @test.exist('/dogs') IS NULL; -- 1 expected, 1 returned
Weitere Informationen
Fehlerhafte Änderungen an Funktionen der Datenbank-Engine in SQL Server 2014
Als veraltet markierte Funktionen der Datenbank-Engine in SQL Server 2014
Nicht mehr unterstützte Datenbank-Engine-Funktionalität in SQL Server 2014
ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL)