Condividi tramite


Modifiche del comportamento alle funzionalità del motore di database in SQL Server 2014

In questo argomento vengono descritte le modifiche del comportamento nel motore di database. Le modifiche del comportamento influiscono sul funzionamento o sull'interazione delle funzionalità in SQL Server 2014 rispetto alle versioni precedenti di SQL Server.

Modifiche del comportamento in SQL Server 2014

Nelle versioni precedenti di SQL Server, le query su un documento XML che contiene stringhe su una determinata lunghezza (più di 4020 caratteri) possono restituire risultati non corretti. In SQL Server 2014 tali query restituiscono i risultati corretti.

Modifiche del comportamento in SQL Server 2012

Individuazione metadati

I miglioramenti apportati al motore di database a partire da SQL Server 2012 consentono a SQLDescribeCol di ottenere descrizioni più accurate dei risultati previsti rispetto a quelli restituiti da SQLDescribeCol nelle versioni precedenti di SQL Server. Per altre informazioni, vedere Individuazione metadati.

L'opzione SET FMTONLY per determinare il formato di una risposta senza eseguire effettivamente la query viene sostituita con sp_describe_first_result_set (Transact-SQL), sp_describe_undeclared_parameters (Transact-SQL), sys.dm_exec_describe_first_result_set (Transact-SQL)e sys.dm_exec_describe_first_result_set_for_object (Transact-SQL).

Modifiche al comportamento nello scripting di un'attività di SQL Server Agent

A partire da SQL Server 2012, se si crea un nuovo processo copiando lo script da un processo esistente, il nuovo processo potrebbe influire inavvertitamente sul processo esistente. Per creare un nuovo processo usando lo script da un processo esistente, eliminare manualmente il parametro @schedule_uid che è in genere l'ultimo parametro della sezione che crea la pianificazione del processo nel processo esistente. Verrà creata una nuova pianificazione indipendente per la nuova attività senza influire sulle attività esistenti.

Raggruppamento costante per funzioni e metodi CLR User-Defined

A partire da SQL Server 2012, gli oggetti CLR definiti dall'utente seguenti sono ora piegabili:

  • Funzioni CLR deterministiche con valori scalari definite dall'utente.
  • Metodi deterministici di tipi CLR definiti dall'utente.

Questo miglioramento cerca di migliorare le prestazioni quando queste funzioni o metodi vengono chiamati più volte con gli stessi argomenti. Tuttavia, questa modifica può causare risultati imprevisti quando funzioni o metodi non deterministici sono stati contrassegnati come deterministici in errore. Il determinismo di una funzione o di un metodo CLR è indicato dal valore della IsDeterministic proprietà di SqlFunctionAttribute o SqlMethodAttribute.

Il comportamento del metodo STEnvelope() è stato modificato con tipi spaziali vuoti

Il comportamento del STEnvelope metodo con oggetti vuoti è ora coerente con il comportamento di altri metodi spaziali di SQL Server.

In SQL Server 2008 il STEnvelope metodo ha restituito i risultati seguenti quando viene chiamato con oggetti vuoti:

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 il STEnvelope metodo restituisce ora i risultati seguenti quando viene chiamato con oggetti vuoti:

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  

Per determinare se un oggetto spaziale è vuoto, si deve chiamare il metodo STIsEmpty (tipo di dati geometria).

La funzione LOG ha un nuovo parametro facoltativo

La LOG funzione dispone ora di un parametro di base facoltativo. Per altre informazioni, vedere LOG (Transact-SQL).

Il calcolo delle statistiche durante le operazioni sugli indici partizionati è stato modificato

In SQL Server 2014 le statistiche non vengono create analizzando tutte le righe della tabella quando viene creato o ricompilato un indice partizionato. Query Optimizer usa invece l'algoritmo di campionamento predefinito per generare statistiche. Dopo l'aggiornamento di un database con indici partizionati, è possibile notare una differenza nei dati dell'istogramma per questi indici. Questa modifica nel comportamento potrebbe non influire sulle prestazioni delle query. Per ottenere statistiche sugli indici partizionati analizzando tutte le righe nella tabella, usare CREATE STATISTICS o UPDATE STATISTICS con la clausola FULLSCAN.

La conversione del tipo di dati tramite il metodo XML Value è cambiata

Il comportamento interno del value metodo del tipo di xml dati è stato modificato. Questo metodo esegue una query XQuery sul codice XML e restituisce un valore scalare del tipo di dati DI SQL Server specificato. Il tipo xs deve essere convertito nel tipo di dati di SQL Server. In precedenza, il value metodo converte internamente il valore di origine in un xs:string, quindi converte il valore xs:string nel tipo di dati DI SQL Server. In SQL Server 2014 la conversione in xs:string viene ignorata nei casi seguenti:

Tipo di dati XS di origine Tipo di dati SQL Server di destinazione
byte

breve

Int

numero intero

lungo

byte senza segno

unsignedShort (numero breve senza segno)

unsignedInt

intero lungo non firmato

positiveInteger

nonPositiveInteger

negativeInteger

nonNegativeInteger
tinyint

smallint

Int

bigint

decimale

numerico
decimale decimale

numerico
galleggiare autentico
doppio galleggiare

Il nuovo comportamento migliora le prestazioni quando è possibile ignorare la conversione intermedia. Tuttavia, quando le conversioni dei tipi di dati hanno esito negativo, vengono visualizzati messaggi di errore diversi rispetto a quelli generati durante la conversione dal valore xs:string intermedio. Ad esempio, se il metodo value non è riuscito a convertire il int valore 100000 in un smallint, il messaggio di errore precedente era:

The conversion of the nvarchar value '100000' overflowed an INT2 column. Use a larger integer column.

In SQL Server 2014, senza la conversione intermedia in xs:string, il messaggio di errore è:

Arithmetic overflow error converting expression to data type smallint.

modifica del comportamento di sqlcmd.exe in modalità XML

Ci sono modifiche nel comportamento se si usa sqlcmd.exe con la modalità XML (comando:XML ON) durante l'esecuzione di un'istruzione SELECT * da T FOR XML.

DBCC CHECKIDENT - Messaggio modificato

In SQL Server 2012 il messaggio restituito dal comando DBCC CHECKIDENT è cambiato solo quando viene usato con reseed new_reseed_value per modificare il valore identity corrente. Il nuovo messaggio è "Verifica delle informazioni sull'identità: valore dell'identità corrente '<valore dell'identità corrente>'". Esecuzione DBCC completata. Se DBCC ha stampato i messaggi di errore, contattare l'amministratore di sistema."

Nelle versioni precedenti il messaggio è "Verifica delle informazioni sull'identità: valore identity corrente '<valore identity> corrente', valore della colonna corrente '<valore> colonna corrente'. Esecuzione DBCC completata. Se DBCC ha stampato i messaggi di errore, contattare l'amministratore di sistema." Il messaggio rimane invariato quando DBCC CHECKIDENT viene specificato con NORESEED, senza un secondo parametro o senza un valore di nuovo. Per altre informazioni, vedere DBCC CHECKIDENT (Transact-SQL).

Il comportamento della funzione exist() nel tipo di dati XML è stato modificato

Il comportamento della exist() funzione è cambiato quando si confronta un tipo di dati XML con un valore Null a 0 (zero). Si consideri l'esempio seguente:

DECLARE @test XML;  
SET @test = null;  
SELECT COUNT(1) WHERE @test.exist('/dogs') = 0;  

Nelle versioni precedenti, questo confronto restituisce 1 (true); ora, questo confronto restituisce 0 (zero, false).

I confronti seguenti non sono stati modificati:

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  

Vedere anche

Modifiche di rilievo alle funzionalità del motore di database in SQL Server 2014
Funzionalità del motore di database deprecate in SQL Server 2014
Funzionalità del motore di database non più disponibili in SQL Server 2014
Livello di compatibilità ALTER DATABASE (Transact-SQL)