Freigeben über


Verhaltensänderungen bei Datenbank-Engine-Funktionen in SQL Server 2014

In diesem Thema werden Verhaltensänderungen im Datenbankmodul 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.

Verhaltensänderungen in SQL Server 2012

Metadatenermittlung

Verbesserungen im Datenbankmodul ab SQL Server 2012 ermöglichen SQLDescribeCol, genauere Beschreibungen der erwarteten Ergebnisse zu erhalten 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 Formats einer Antwort ohne tatsächliche Ausführung der Abfrage 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 skripting einer SQL Server-Agent-Aufgabe

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 den Parameter manuell @schedule_uid , der in der Regel der letzte Parameter des Abschnitts ist, der den Auftragszeitplan im vorhandenen Auftrag erstellt. Dadurch wird ein neuer unabhängiger Zeitplan für den neuen Auftrag erstellt, ohne dass sich dies auf vorhandene Aufträge auswirkt.

Konstante Faltung für CLR-User-Defined Funktionen und Methoden

Ab SQL Server 2012 können nun die folgenden benutzerdefinierten CLR-Objekte gefaltet werden:

  • Deterministische benutzerdefinierte skalare CLR-Funktionen.
  • Deterministische Methoden von benutzerdefinierten CLR-Typen.

Diese Verbesserung versucht, die Leistung zu verbessern, wenn diese Funktionen oder Methoden mehrmals mit denselben Argumenten aufgerufen werden. Diese Änderung kann jedoch zu unerwarteten Ergebnissen führen, wenn nicht deterministische Funktionen oder Methoden im Fehler als deterministisch gekennzeichnet wurden. Der Determinismus einer CLR-Funktion oder -Methode wird durch den Wert der IsDeterministic Eigenschaft der SqlFunctionAttribute oder SqlMethodAttribute angegeben.

Verhalten der STEnvelope() -Methode hat sich mit leeren räumlichen Typen geändert

Das Verhalten der STEnvelope Methode mit leeren Objekten entspricht nun dem Verhalten anderer räumlicher SQL Server-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 jetzt die folgenden Ergebnisse zurück, wenn sie mit leeren Objekten aufgerufen werden:

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 festzustellen, ob ein räumliches Objekt leer ist, rufen Sie die STIsEmpty -Methode (Geometry Data Type) auf.

LOG-Funktion verfügt über einen neuen optionalen Parameter

Die LOG Funktion verfügt jetzt über einen optionalen Basisparameter . Weitere Informationen finden Sie unter LOG (Transact-SQL).

Die Statistikberechnung bei partitionierten Indexvorgängen hat sich geändert.

In SQL Server 2014 werden Statistiken nicht erstellt, indem alle Zeilen in der Tabelle durchsucht werden, wenn ein partitionierter Index erstellt oder neu erstellt wird. Stattdessen verwendet der Abfrageoptimierer den Standard-Samplingalgorithmus, um Statistiken zu generieren. Nach dem Upgrade einer Datenbank mit partitionierten Indizes können Sie einen Unterschied in den Histogrammdaten für diese Indizes feststellen. Diese Änderung des Verhaltens wirkt sich möglicherweise nicht auf die Abfrageleistung aus. 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.

Datentypkonvertierung durch die XML-Wertmethode hat sich geändert

Das interne Verhalten der value Methode des xml Datentyps wurde 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 SQL Server-Datentyp konvertiert werden. Zuvor hat die value Methode den Quellwert intern in eine xs:string konvertiert und dann die xs:string in den SQL Server-Datentyp konvertiert. In SQL Server 2014 wird die Konvertierung in "xs:string" in den folgenden Fällen übersprungen:

XS-Quelldatentyp Sql Server-Zieldatentyp
Byte

kurz

INT

Integer

lang

unsigniertes Byte

unsignedShort

vorzeichenloser Integer

Ganzzahl ohne Vorzeichen (unsignedLong)

positiveInteger

nonPositiveInteger

negativeInteger

nichtnegativer Integer
tinyint

smallint

INT

bigint

Decimal

Numerisch
Decimal Decimal

Numerisch
Schweben Echt
doppelt Schweben

Das neue Verhalten verbessert die Leistung, wenn die Zwischenkonvertierung übersprungen werden kann. Wenn die Datentypkonvertierungen fehlschlagen, werden jedoch unterschiedliche Fehlermeldungen als die Fehlermeldungen angezeigt, die beim Konvertieren aus dem Zwischenwert "xs:string" ausgelöst wurden. Wenn die Wertmethode beispielsweise nicht den int Wert 100000 in ein smallintkonvertiert 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 ohne die Zwischenkonvertierung in xs:string lautet die Fehlermeldung:

Arithmetic overflow error converting expression to data type smallint.

sqlcmd.exe Verhaltensänderung im XML-Modus

Es gibt Verhaltensänderungen, wenn Sie sqlcmd.exe im XML-Modus (:XML ON-Befehl) verwenden, wenn Sie eine SELECT * aus T FOR XML ausführen.

DBCC CHECKIDENT Überarbeitete Nachricht

In SQL Server 2012 wurde die vom DBCC CHECKIDENT zurückgegebene Nachricht nur geändert, wenn sie mit RESEED new_reseed_value verwendet wird, um den aktuellen Identitätswert zu aktualisieren. Die neue Meldung lautet "Überprüfen von Identitätsinformationen: aktueller Identitätswert '<aktueller Identitätswert>'". Die DBCC-Ausführung wurde abgeschlossen. Wenn DBCC Fehlermeldungen gedruckt hat, wenden Sie sich an ihren Systemadministrator."

In früheren Versionen lautet die Meldung "Identitätsinformationen überprüfen: aktueller Identitätswert "<aktueller Identitätswert>", aktueller Spaltenwert "<aktueller Spaltenwert>". DIE DBCC-Ausführung wurde abgeschlossen. Wenn DBCC Fehlermeldungen gedruckt hat, wenden Sie sich an ihren Systemadministrator." Die Nachricht ist unverändert, wenn DBCC CHECKIDENT sie mit NORESEED, ohne einen zweiten Parameter oder ohne einen erneuten Wert angegeben wird. Weitere Informationen finden Sie unter DBCC CHECKIDENT (Transact-SQL).

Verhalten der Exist()-Funktion für XML-Datentyp hat sich geändert

Das Verhalten der exist()-Funktion hat sich geändert, wenn ein XML-Datentyp mit einem Nullwert 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 gibt dieser Vergleich 1 (true) zurück; Dieser Vergleich gibt jetzt 0 (null, false) zurück.

Die folgenden Vergleiche wurden 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  

Siehe auch

Fehlerhafte Änderungen an Funktionen der Datenbank-Engine in SQL Server 2014
Als veraltet markierte Funktionen des Datenbankmoduls in SQL Server 2014
Nicht mehr vorhandene Datenbankmodulfunktionalität in SQL Server 2014
ALTER DATABASE-Kompatibilitätsgrad (Transact-SQL)