sp_db_vardecimal_storage_format (Transact-SQL)

Restituisce lo stato corrente del formato di archiviazione vardecimal di un database oppure abilita il formato di archiviazione vardecimal per un database. In SQL Server 2008 i database utente sono sempre abilitati. È richiesto SQL Server 2005 Service Pack 2 o versione successiva. Il formato di archiviazione vardecimal è disponibile solo in SQL Server Enterprise, Developer ed Evaluation Edition.

Nota

L'abilitazione del formato di archiviazione vardecimal per i database è necessaria solo in SQL Server 2005.

Nota importanteImportante

La modifica dello stato del formato di archiviazione vardecimal di un database può influire su backup e recupero, mirroring del database, sp_attach_db, log shipping e replica. Per informazioni sul formato di archiviazione vardecimal, vedere Archiviazione di dati decimal come lunghezza variabile.

Sintassi

sp_db_vardecimal_storage_format [ [ @dbname = ] 'database_name'] 
    [ , [ @vardecimal_storage_format = ] { 'ON' | 'OFF' } ] 
[;]

Argomenti

  • [ @dbname = ] 'database_name'
    Nome del database per il quale deve essere modificato il formato di archiviazione. database_name è di tipo sysname e non prevede alcun valore predefinito. Se il nome del database viene omesso, viene restituito lo stato del formato di archiviazione vardecimal di tutti i database nell'istanza di SQL Server.

  • [ @vardecimal_storage_format = ] {'ON'|'OFF'}
    Specifica se il formato di archiviazione vardecimal è abilitato. @vardecimal_storage_format può essere ON oppure OFF. Il parametro è di tipo varchar(3) e non prevede alcun valore predefinito. Se viene specificato il nome di un database ma viene omesso @vardecimal_storage_format, viene restituita l'impostazione corrente del database specificato. Questo argomento non ha effetto in SQL Server 2008 o versioni successive.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

Set di risultati

Se il formato di archiviazione del database non può essere modificato, sp_db_vardecimal_storage_format restituisce un errore. Se lo stato corrente del database corrisponde a quello specificato, la stored procedure non produce alcun effetto.

Se l'argomento @vardecimal_storage_format non viene specificato, restituisce le colonne Database Name e Vardecimal State.

Osservazioni

sp_db_vardecimal_storage_format restituisce lo stato di vardecimal ma non consente di modificare tale stato.

sp_db_vardecimal_storage_format avrà esito negativo nelle circostanze seguenti:

  • Non sono presenti utenti attivi nel database.

  • È abilitato il mirroring del database.

  • L'edizione di SQL Server non supporta il formato di archiviazione vardecimal.

Per modificare lo stato del formato di archiviazione vardecimal in OFF, è necessario che un database sia impostato sulla modalità di recupero con registrazione minima. In caso di impostazione di un database su tale modalità, la catena di log è interrotta. Dopo aver impostato lo stato del formato di archiviazione vardecimal su OFF, eseguire un backup completo del database.

La modifica dello stato in OFF avrà esito negativo se sono presenti tabelle in cui viene utilizzata la compressione di database di tipo vardecimal. Per modificare il formato di archiviazione di una tabella, utilizzare sp_tableoption. Per determinare le tabelle di un database in cui viene utilizzato il formato di archiviazione vardecimal, utilizzare la funzione OBJECTPROPERTY e cercare la proprietà TableHasVarDecimalStorageFormat, come illustrato nell'esempio seguente.

USE AdventureWorks2008R2 ;
GO
SELECT name, object_id, type_desc
FROM sys.objects 
 WHERE OBJECTPROPERTY(object_id, 
   N'TableHasVarDecimalStorageFormat') = 1 ;
GO

Esempi

Tramite il codice seguente viene abilitata la compressione nel database AdventureWorks2008R2, viene verificato lo stato e quindi vengono compresse le colonne decimal e numeric della tabella Sales.SalesOrderDetail.

USE master ;
GO

EXEC sp_db_vardecimal_storage_format 'AdventureWorks2008R2', 'ON' ;
GO

-- Check the vardecimal storage format state for
-- all databases in the instance.
EXEC sp_db_vardecimal_storage_format ;
GO

USE AdventureWorks2008R2 ;
GO

EXEC sp_tableoption 'Sales.SalesOrderDetail', 'vardecimal storage format', 1 ;
GO