ON UPDATE {CASCADE | NO ACTION}
Specifica l'azione che viene eseguita su una riga della nuova tabella se tale riga include una relazione referenziale e la riga a cui fa riferimento viene aggiornata nella tabella padre. Il valore predefinito è NO ACTION.
Se si specifica CASCADE, la riga viene aggiornata nella tabella di riferimento se viene aggiornata nella tabella padre. Se si specifica NO ACTION, viene generato un errore ed eseguito il rollback dell'operazione di aggiornamento della riga nella tabella padre.
Nel database Northwind, ad esempio, la tabella Orders include una relazione referenziale con la tabella Customers. La chiave esterna Orders.CustomerID fa riferimento alla chiave primaria Customers.CustomerID.
Se viene eseguita un'istruzione UPDATE in una riga nella tabella Customers e si specifica ON UPDATE CASCADE per Orders.CustomerID, viene verificata l'esistenza di una o più righe dipendenti nella tabella Orders. Le eventuali righe dipendenti individuate nella tabella Orders vengono aggiornate insieme alla riga di riferimento della tabella Customers.
Se si specifica NO ACTION, viene generato un errore ed eseguito il rollback dell'operazione di aggiornamento della riga nella tabella Customers se almeno una riga della tabella Orders vi fa riferimento.
CHECK
Vincolo che impone l'integrità di dominio tramite la limitazione dei valori che è possibile inserire in una o più colonne.
NOT FOR REPLICATION
Parole chiave utilizzate per impedire l'imposizione del vincolo CHECK durante il processo di distribuzione eseguito dalla replica. Quando le tabelle eseguono sottoscrizioni a una pubblicazione per la replica, non aggiornare direttamente la tabella di sottoscrizione. Aggiornare invece la tabella di pubblicazione e consentire alla replica di ridistribuire i dati nella tabella di sottoscrizione. È possibile definire un vincolo CHECK nella tabella di sottoscrizione per impedire modifiche da parte degli utenti. Se la clausola NOT FOR REPLICATION viene omessa, tuttavia, il vincolo CHECK impedisce anche al processo di replica di distribuire modifiche dalla tabella di pubblicazione alla tabella di sottoscrizione. La clausola NOT FOR REPLICATION indica che il vincolo viene imposto alle modifiche dell'utente, ma non al processo di replica.
Il vincolo CHECK NOT FOR REPLICATION viene applicato all'immagine di un record precedente e successiva all'aggiornamento per impedire l'aggiunta o l'eliminazione di record nell'intervallo replicato. Viene eseguita una verifica di tutte le operazioni di inserimento ed eliminazione. Se intervengono nell'intervallo replicato vengono respinte.
Quando si utilizza questo vincolo in una colonna Identity, non è necessario reinizializzare i valori di tale colonna della tabella in corrispondenza dell'aggiornamento della colonna.
logical_expression
Espressione logica che restituisce TRUE o FALSE.
column
Colonna o elenco di colonne specificate tra parentesi nei vincoli di tabella per indicare le colonne utilizzate nella definizione di vincolo.
[ASC | DESC]
Specifica l'ordinamento della colonna o delle colonne che fanno parte dei vincoli di tabella. Il valore predefinito è ASC.
n
Segnaposto che indica la possibilità di ripetere l'elemento precedente n volte.
Osservazioni
SQL Server supporta fino a due miliardi di tabelle per ogni database e 1.024 colonne per ogni tabella. Il numero di righe e le dimensioni totali della tabella sono limitate solo dallo spazio di archiviazione disponibile. Il numero massimo di byte per ogni riga è di 8.060. Se si creano tabelle con colonne di tipo varchar, nvarchar o varbinary in cui la larghezza totale definita è maggiore di 8.060 byte, la tabella viene comunque creata ma viene visualizzato un messaggio di avviso. Se in una riga si inseriscono più di 8.060 byte oppure si esegue un aggiornamento che comporta un aumento delle dimensioni totali della riga oltre gli 8.060 byte, viene visualizzato un messaggio di errore e l'istruzione ha esito negativo.
Le istruzioni CREATE TABLE che includono una colonna di tipo sql_variant possono generare l'avviso seguente:
The total row size (xx) for table 'yy' exceeds the maximum number of bytes per row (8060). Rows that exceed the maximum number of bytes will not be added.
Questo avviso viene visualizzato perché la lunghezza massima di sql_variant è pari a 8016 byte. Se una colonna di tipo sql_variant contiene valori con lunghezza prossima al limite massimo, potrebbe assumere dimensioni che superano le dimensioni massime.
Ogni tabella può includere al massimo 249 indici non cluster e 1 indice cluster, compresi quelli generati per il supporto di qualsiasi vincolo PRIMARY KEY e UNIQUE definito per la tabella.
In SQL Server non è previsto un ordine specifico per i valori DEFAULT, IDENTITY, ROWGUIDCOL o i vincoli di colonna in una definizione di colonna.
Tabelle temporanee
È possibile creare tabelle temporanee locali o globali. Le tabelle locali sono visibili solo nella sessione corrente, mentre quelle globali sono visibili in tutte le sessioni.
I nomi delle tabelle temporanee locali devono iniziare con un simbolo di cancelletto (#table_name), mentre i nomi delle tabelle temporanee globali devono iniziare con due simboli di cancelletto (##table_name).
Le istruzioni SQL fanno riferimento alla tabella temporanea utilizzando il valore specificato per l'argomento table_name nell'istruzione CREATE TABLE:
CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)
INSERT INTO #MyTempTable VALUES (1)
Se viene creata una tabella temporanea locale in una stored procedure o in un'applicazione che può essere eseguita contemporaneamente da più utenti, è necessario poter contraddistinguere le tabelle create dai vari utenti. A tale scopo a ogni nome di tabella temporanea locale viene aggiunto un suffisso numerico. Il nome completo di una tabella temporanea archiviata nella tabella sysobjects in tempdb è composto dal nome di tabella specificato nell'istruzione CREATE TABLE e dal suffisso numerico generato dal sistema. Per il supporto del suffisso, l'argomento table_name specificato per un nome temporaneo locale non può superare i 116 caratteri.
Le tabelle temporanee vengono eliminate automaticamente quando non rientrano nell'ambito valido, a meno che non vengano eliminate in modo esplicito tramite l'istruzione DROP TABLE:
Una tabella temporanea locale creata in una stored procedure viene eliminata automaticamente al completamento della stored procedure. È possibile fare riferimento alla tabella temporanea in qualsiasi stored procedure nidificata eseguita dalla stored procedure con cui è stata creata la tabella temporanea. Non è invece possibile fare riferimento alla tabella nel processo che ha richiamato la stored procedure con cui la tabella è stata creata.
Tutte le altre tabelle temporanee locali vengono eliminate automaticamente al termine della sessione corrente.
Le tabelle temporanee globali vengono eliminate automaticamente al termine della sessione in cui è stata creata la tabella e quando tutte le altre attività non vi fanno più riferimento. L'associazione tra un'attività e una tabella viene mantenuta solo per la durata di una singola istruzione Transact-SQL. Una tabella temporanea globale viene pertanto eliminata al termine dell'ultima istruzione Transact-SQL che fa riferimento alla tabella al termine della sessione di creazione.
Una tabella temporanea locale creata all'interno una stored procedure o in un trigger si distingue da una tabella temporanea avente lo stesso nome creata prima della chiamata alla stored procedure o al trigger. Se una query fa riferimento a una tabella temporanea e sono disponibili due tabelle temporanee aventi lo stesso nome, non è possibile stabilire in base a quale tabella verrà risolta la query. Le stored procedure nidificate, inoltre, possono creare tabelle temporanee aventi lo stesso nome di una tabella temporanea creata dalla stored procedure chiamante. Tutti i riferimenti ai nomi di tabella nella stored procedure nidificata vengono risolti in base alla tabella creata nella procedura nidificata, ad esempio: