Teilen über


sp_db_vardecimal_storage_format (Transact-SQL)

Gilt für: SQL Server

Gibt den aktuellen Status des Vardecimal-Speicherformats einer Datenbank zurück oder aktiviert eine Datenbank für das Vardecimal-Speicherformat . In SQL Server 2008 (10.0.x) und höheren Versionen sind Benutzerdatenbanken immer aktiviert. Da die Komprimierung auf Zeilenebene jedoch dieselben Ziele erreicht, ist das Vardecimal-Speicherformat veraltet. Das Aktivieren von Datenbanken für das Vardecimal-Speicherformat ist nur in SQL Server 2005 (9.x) erforderlich.

Wichtig

Das Ändern des Vardecimal Storage Format Status einer Datenbank kann sich auf Die Sicherung und Wiederherstellung, Datenbankspiegelung, sp_attach_dbProtokollversand und Replikation auswirken.

Syntax

sp_db_vardecimal_storage_format
    [ [ @dbname = ] N'dbname' ]
    [ , [ @vardecimal_storage_format = ] 'vardecimal_storage_format' ]
[ ; ]

Argumente

[ @dbname = ] N'dbname'

Der Name der Datenbank, für die das Speicherformat geändert werden soll. @dbname ist "sysname" mit der Standardeinstellung "NULL. Wenn der Datenbankname nicht angegeben wird, wird der Status des vardecimal storage format of all the databases in the instance of SQL Server zurückgegeben.

[ @vardecimal_storage_format = ] 'vardecimal_storage_format'

Gibt an, ob das Vardecimal-Speicherformat aktiviert ist. @vardecimal_storage_format ist varchar(3) mit einem Standardwert von NULL. @vardecimal_storage_format kann sein ON oder OFF. Wenn ein Datenbankname angegeben wird, aber @vardecimal_storage_format weggelassen wird, wird die aktuelle Einstellung der angegebenen Datenbank zurückgegeben.

Dieses Argument hat keine Auswirkungen auf SQL Server 2008 (10.0.x) und höhere Versionen.

Rückgabecodewerte

0 (erfolgreich) oder 1 Fehler.

Resultset

Wenn das Datenbankspeicherformat nicht geändert werden kann, sp_db_vardecimal_storage_format wird ein Fehler zurückgegeben. Wenn sich die Datenbank bereits im angegebenen Zustand befindet, bleibt die gespeicherte Prozedur ohne Wirkung.

Wenn das argument @vardecimal_storage_format nicht angegeben wird, sp_db_vardecimal_storage_format werden die Spalten und die Vardecimal StateSpalten Database Name zurückgegeben.

Hinweise

sp_db_vardecimal_storage_formatgibt den Vardecimal-Zustand zurück, kann den Vardecimal-Zustand jedoch nicht ändern.

sp_db_vardecimal_storage_format schlägt unter folgenden Umständen fehl:

  • In der Datenbank sind aktive Benutzer vorhanden.
  • Für die Datenbank sind Spiegelungen aktiviert.
  • Die Edition von SQL Server unterstützt kein vardezimales Speicherformat.

Um den Status des vardecimal storage format in OFFzu ändern, muss eine Datenbank auf das einfache Wiederherstellungsmodell festgelegt werden. Wenn eine Datenbank auf einfache Wiederherstellung festgelegt ist, wird die Protokollkette unterbrochen. Führen Sie eine vollständige Datenbanksicherung aus, nachdem Sie den Status des Vardecimal-Speicherformats auf " OFFfestgelegt haben.

Wenn Tabellen mit vardecimal-Datenbankkomprimierung vorhanden sind, tritt beim Ändern des Zustands OFF ein Fehler auf. Verwenden Sie sp_tableoption, um das Speicherformat einer Tabelle zu ändern. Um zu ermitteln, welche Tabellen in einer Datenbank vardecimal storage format verwenden, verwenden Sie die OBJECTPROPERTY Funktion, und suchen Sie nach der TableHasVarDecimalStorageFormat Eigenschaft, wie im folgenden Beispiel gezeigt.

USE AdventureWorks2022;
GO

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

Beispiele

Im folgenden Code werden die Komprimierung in der AdventureWorks2022-Datenbank aktiviert, der Status bestätigt und anschließend die Spalten decimal und numeric in der Sales.SalesOrderDetail-Tabelle komprimiert.

USE master;
GO

EXEC sp_db_vardecimal_storage_format 'AdventureWorks2022', 'ON';
GO

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

USE AdventureWorks2022;
GO

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