Udostępnij za pośrednictwem


Using Special Data Types

W tym temacie opisano typy danych specjalnych, które są dostępne w SQL Server. Typy danych specjalne są tymi, które nie pasują do żadnych innych danych typu kategorii.W SQL Server, typy danych specjalne to bit, hierarchyid, sql_variant, sysname, table, timestamp i typy danych alias.

bit

The bitdata type is a numeric data type that stores either 0 or 1.Można konwertować ciąg wartości PRAWDA i FAŁSZ bit wartości, jak pokazano w poniższym przykładzie:

SELECT CONVERT (bit, 'true')
SELECT CONVERT(bit, 'false')

In this example, true is converted to 1 and false is converted to 0.bit data does not have to be enclosed in single quotation marks.

hierarchyid

The hierarchyid data type is used to manage hierarchical data and tables that have a hierarchical structure.Aby pracować z danymi hierarchiczny w Transact-SQL Użycie kodu Funkcje hierarchyid.Aby uzyskać więcej informacji zobaczUżywanie typów danych hierarchyid (aparat bazy danych).

sql_variant

The sql_variant data type enables a single kolumna, parameter, or variable to store data values of different data types.Każde wystąpienie sql_variant Kolumna rejestruje wartości oraz metadane opisujące wartość. Dostępne są następujące metadane:

  • podstawowy typ danych

  • Maksymalny rozmiar

  • Skala

  • Precyzja

  • Collation

Aby pobrać metadane dla określonego sql_variant wystąpienie, należy użyć SQL_VARIANT_PROPERTY funkcja.

W poniższym przykładzie, druga tabela zawiera sql_variant kolumna:

CREATE TABLE ObjectTable (
   ObjectID int CONSTRAINT PKObjectTable PRIMARY KEY,
   ObjectName nvarchar(80),
   ObjectWeight decimal(10,3),
   ObjectColor nvarchar(20))
CREATE TABLE VariablePropertyTable (
   ObjectID int REFERENCES ObjectTable(ObjectID),
   PropertyName nvarchar(100),
   PropertyValue sql_variant,
   CONSTRAINT PKVariablePropertyTable
   PRIMARY KEY(ObjectID, PropertyName))

nazwa_systemu

The sysname data type is used for tabela columns, variables, and procedura przechowywana parameters that store object names. Dokładne określenie sysname jest powiązana z reguły dla identyfikatorów. Therefore, it can vary between instances of SQL Server.sysname is functionally the same as nvarchar(128) except that, by default, sysname is NOT NULL.We wcześniejszych wersjach SQL Server, sysname jest definiowana jako varchar(30).

Important noteImportant Note:

W bazach danych, która jest uwzględniana wielkość liter lub mają Sortowanie binarne, sysname jest rozpoznawany jako SQL Server Typ danych systemu tylko wtedy, gdy pojawia się na małe przypadek.

tabela

The table data type functions like a tabela tymczasowa.Jest on używany do przechowywania wyników dla przetwarzania później.Ten typ danych można używać tylko do definiowania zmiennych lokalnych typu table a wartość zwracaną przez funkcja zdefiniowaną przez użytkownika.

Definicja tabela wartość zmiennej lub zwrotu zawiera definicje kolumn, typ danych, precyzji i skali każdej kolumna i opcjonalnie ograniczenia klucz podstawowy, unikatowy, wartości NULL i wyboru.Nie można użyć tabela zdefiniowaną przez użytkownika jako typ danych.

W formacie wierszy, które są przechowywane w table Zmienna lub które są zwracane przez funkcja zdefiniowaną przez użytkownika muszą być zdefiniowane jest zadeklarowana jako zmienna lub funkcja jest tworzony. Składnia jest oparty na składni CREATE tabela, na przykład:

DECLARE @TableVar TABLE (Cola int PRIMARY KEY, Colb char(3))
INSERT INTO @TableVar VALUES (1, 'abc')
INSERT INTO @TableVar VALUES (2, 'def')
SELECT * FROM @TableVar
GO

table variables and user-defined functions that return a table can be used only in certain SELECT and INSERT statements, and where tables are supported in the UPDATE, DELETE, and DECLARE CURSOR statements.table variables and user-defined functions that return a table cannot be used in any other Transact-SQL statements.

Indeksy lub inne ograniczenia, które są stosowane do tabela musi być zdefiniowany jako część DECLARE zmiennej lub instrukcja CREATE funkcja.Nie można ich stosować później ponieważ instrukcji CREATE INDEX lub ALTER TABLE nie mogą odwoływać się do zmiennych Tabela i funkcji zdefiniowanych przez użytkownika.

Aby uzyskać więcej informacji na temat składni, która jest używana do definiowania table zmienne i funkcje zdefiniowane przez użytkownika, zobacz DECLARE @local\_variable (Transact-SQL) i CREATE funkcja języka Transact-SQL).

Sygnatura czasowa

The timestamp data type has nothing to do with times or dates.timestamp values are binary numbers that indicate the relative sequence in which data modifications have occurred in a database.

Nigdy nie użycia timestamp kolumny w kluczach, szczególnie kluczy podstawowych, ponieważ timestamp wartość zmienia się za każdym razem, zmienia się w wierszu.

Aby zarejestrować czas, kiedy występują zmiany danych w tabela, należy użyć jednego datetime2 lub smalldatetime Typ danych do rejestrowania zdarzeń i wyzwalaczy automatycznej aktualizacji wartości w przypadku wystąpienia jakichkolwiek zmian.

Typy danych alias

Typy danych alias umożliwiają rozszerzenie SQL Server Wpisz dane podstawowe, takie jak varchar, opisową nazwę i format, który można dostosować do konkretnych zastosowań. Na przykład, poniższa instrukcja wykonuje birthday Typ danych zdefiniowany przez użytkownika, na podstawie datetime Wpisz dane i zezwala na wartości null (NULL):

EXEC sp_addtype birthday, datetime, 'NULL'

Należy zachować ostrożność podczas wybierania wykonywania typów danych zdefiniowanych przez użytkownika typów podstawowych.Na przykład w Stanach Zjednoczonych społecznych zabezpieczeń liczby mają format z nnn-nn-nnnn.Chociaż numery zabezpieczeń społecznych zawiera numery, numery identyfikator formularza i nie podlegają operacji matematycznych.Dlatego jest powszechną praktyką, aby utworzyć typ danych zdefiniowany przez użytkownika numeru NIP jako varchar i Tworzenie ograniczenia CHECK do wymuszania format numery ubezpieczenia społecznego, które są przechowywane w tabela, jak pokazano w poniższym przykładzie:

EXEC sp_addtype SSN, 'VARCHAR(11)', 'NOT NULL'
GO
CREATE TABLE ShowSSNUsage (EmployeeID int PRIMARY KEY, EmployeeSSN SSN, CONSTRAINT CheckSSN CHECK ( EmployeeSSN LIKE '[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' )
)
GO

Jeśli kolumny numeru PESEL są zazwyczaj używane jako kolumny klucz w indeksach, szczególnie stosowanie indeksów klastrowanych, rozmiary kluczy można zmniejszyć z 11 bajtów do 4, gdy typ danych zdefiniowany przez użytkownika numeru PESEL jest implementowane przy użyciu int Zamiast tego podstawowy typ danych. To zmniejszenie rozmiaru klucz zwiększa pobierania danych.Ulepszona wydajność pobierania danych i eliminacji konieczność ograniczenia CHECK będzie zazwyczaj przewyższają konwersji dodatkowego przetwarzania z int na format znaków po wartości numeru PESEL są wyświetlane lub zmodyfikowane.