Share via


Utilizzo di dati speciali

I tipi di dati speciali sono tipi di dati che non rientrano in alcuna delle categorie di dati descritte in precedenza. Il tipo di dati bit, ad esempio, consente di archiviare i dati sotto forma di 1 o 0 corrispondenti ai valori sì e no di un'indagine sui clienti. In Microsoft SQL Server 2005 sono disponibili diversi tipi di dati che rientrano in questa categoria:

  • bit
    Non è necessario racchiudere il tipo di dati bit tra virgolette singole. Si tratta di dati numerici simili ai tipi di dati integer e numeric di SQL Server, con la sola eccezione che nelle colonne di tipo bit è possibile archiviare solo i valori 0 e 1.

    I valori stringa True e False possono essere convertiti in valori bit come illustrato di seguito.

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

    True viene convertito in 1 e False in 0.

  • sql_variant
    In SQL Server il tipo di dati sql_variant consente di archiviare in una colonna, una variabile o un parametro valori di tipo di dati diverso. In ogni istanza di una colonna di tipo sql_variant viene registrato il valore dei dati e i metadati che descrivono il valore, ovvero il tipo di dati di base, le dimensioni massime, la scala, la precisione e le regole di confronto.

    La seconda tabella nell'esempio seguente include una colonna sql_variant:

    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))
    

    Per ottenere le informazioni sui metadati per un'istanza sql_variant specifica, utilizzare la funzione SQL_VARIANT_PROPERTY.

  • sysname
    Nelle istanze di SQL Server è disponibile il tipo di dati definito dall'utente sysname. sysname viene utilizzato per colonne di tabelle, variabili e parametri di stored procedure in cui sono archiviati nomi di oggetto. L'esatta definizione di sysname è correlata alle regole per gli identificatori e può pertanto variare tra istanze di SQL Server. Dal punto di vista funzionale sysname è equivalente a nvarchar(128). SQL Server 6.5 e versioni precedenti supportano solo identificatori brevi. In tali versioni, sysname è pertanto definito come varchar(30).

    ms191240.note(it-it,SQL.90).gifImportante:
    Nei database in cui viene fatta distinzione tra maiuscole e minuscole, o per cui sono state definite regole di confronto binarie, sysname viene riconosciuto come un tipo di dati di sistema di SQL Server solo se appare in caratteri minuscoli.
  • table
    Il tipo di dati table è simile alle tabelle temporanee e può essere utilizzato per archiviare un set di risultati da elaborare in un momento successivo. Questo tipo di dati è utilizzabile solo per definire variabili locali di tipo table e il valore restituito di una funzione definita dall'utente.

    La definizione di una variabile di tabella o di un valore restituito include le definizioni delle colonne, del tipo di dati, della precisione e della scala di ogni colonna, nonché i vincoli facoltativi PRIMARY KEY, UNIQUE, NULL e CHECK. Non è possibile utilizzare come tipo di dati un tipo di dati definito dall'utente.

    Il formato delle righe archiviato in un variabile table o restituito da una funzione definita dall'utente deve essere definito al momento della dichiarazione della variabile o della creazione della funzione. La sintassi è basata sulla sintassi di CREATE TABLE. Ad esempio:

    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
    

    Le variabili table e le funzioni definite dall'utente che restituiscono una table possono essere utilizzate solo in determinate istruzioni SELECT e INSERT e dove le tabelle sono supportate nelle istruzioni UPDATE, DELETE e DECLARE CURSOR. Le variabili table e le funzioni definite dall'utente che restituiscono una table non possono essere utilizzate in alcuna altra istruzione Transact-SQL.

    Gli indici o gli altri vincoli applicati alla tabella devono essere definiti come parte della variabile DECLARE o dell'istruzione CREATE FUNCTION. Non possono essere applicati successivamente, in quanto le istruzioni CREATE INDEX o ALTER TABLE non possono fare riferimento alle variabili di tabella e alle funzioni definite dall'utente.

    Per ulteriori informazioni sulla sintassi utilizzata per definire le variabili table e le funzioni definite dall'utente, vedere DECLARE @local\_variable (Transact-SQL) e CREATE FUNCTION (Transact-SQL).

  • timestamp
    Il tipo di dati timestamp di SQL Server non è correlato in alcun modo all'ora o alla data. I valori timestamp di SQL Server sono numeri binari che indicano la sequenza relativa in cui si sono verificate le modifiche ai dati in un database. Il tipo di dati timestamp è stato inizialmente implementato per il supporto degli algoritmi di recupero di SQL Server. In corrispondenza di ogni modifica di una pagina, al tipo di dati timestamp veniva assegnato un valore @@DBTS incrementato di un'unità. Tali informazioni erano sufficienti per determinare in fase di recupero la sequenza relativa di modifica delle pagine. I valori timestamp, tuttavia, non avevano alcuna relazione con l'ora.

    In SQL Server versione 7.0 e SQL Server 2000, @@DBTS viene aumentato solo per l'utilizzo nelle colonne timestamp. Se una tabella include una colonna timestamp, ogni volta che una riga viene modificata da un'istruzione INSERT, UPDATE o DELETE, il valore timestamp nella riga viene impostato sul valore corrente di @@DBTS e quindi @@DBTS viene aumentato di uno.

    Non utilizzare mai le colonne timestamp nelle chiavi, in particolare nelle chiavi primarie, in quanto il valore timestamp si modifica a ogni modifica della riga.

    Per registrare il momento in cui si verificano le modifiche dei dati in una tabella, utilizzare un tipo di dati datetime o smalldatetime per registrare gli eventi e i trigger per aggiornare automaticamente i valori all'esecuzione di ogni modifica.

  • Tipi di dati alias
    I tipi di dati alias consentono di estendere un tipo di dati di base di SQL Server, ad esempio varchar, con un nome descrittivo e un formato sviluppato per un uso specifico. L'istruzione seguente implementa ad esempio il tipo di dati birthday definito dall'utente che accetta i valori NULL utilizzando il tipo di dati di base datetime:

    EXEC sp_addtype birthday, datetime, 'NULL'
    

    Fare attenzione nella scelta dei tipi di base per l'implementazione dei tipi di dati definiti dall'utente. Ad esempio, negli Stati Uniti, i numeri della previdenza sociale hanno il formato nnn-nn-nnnn. Sebbene tali numeri contengano cifre, esse costituiscono un identificatore e non sono soggette a operazioni matematiche. Pertanto è pratica comune creare un tipo di dati specifico per i numeri della previdenza sociale, definito dall'utente, come varchar e creare un vincolo CHECK per applicare il formato dei numeri della previdenza sociale archiviati nella tabella:

    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
    

    Se le colonne SSN sono in genere utilizzate come colonne chiave negli indici, in particolare negli indici cluster, la dimensione delle chiavi può essere compressa da 11 byte a 4 se il tipo di dati SSN definito dall'utente viene implementato utilizzando invece il tipo di dati di base int. La riduzione delle dimensioni della chiave migliora il recupero dei dati. La migliorata efficienza del recupero dei dati e l'eliminazione della necessità del vincolo CHECK in genere compensa l'elaborazione di conversione aggiuntiva da int a un formato carattere in caso di visualizzazione o modifica dei valori SSN.

Vedere anche

Altre risorse

CREATE FUNCTION (Transact-SQL)
Tipi di dati (Transact-SQL)
DECLARE @local\_variable (Transact-SQL)
SQL_VARIANT_PROPERTY (Transact-SQL)
table (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005