2014-10-15 5 views
5

Diciamo che avete un tipo definito dall'utente che segue:Sintassi per Valore predefinito per il tipo definito dall'utente come tabella

CREATE TYPE [dbo].[MyDefineType] As Table     
(
ID int NOT NULL 
, Column1 int NOT NULL 
, Column2 Nvarchar(128) NULL 
, Column3 Nvarchar(128) NULL 
, Column4 Nvarchar(128) NULL 
, Column5 Nvarchar(128) NULL  
) 

Così, quando ho passato una tabella valutata attraverso una stored procedure, il tipo rispecchia lo schema del tavolo.

La mia domanda è qual è la sintassi per dare a una delle colonne un valore di defualt? Ad esempio, se ho passato questi valori attraverso una procedura memorizzata in un ciclo, potrei dare alla colonna 5 un valore predefinito, quindi se avessi passato i valori solo per le prime 4 colonne, 5 sarebbe defalut a quello che ho definito essere se no il valore è stato superato. È possibile con un tipo definito dall'utente?

+1

stessa sintassi un vincolo linea predefinito per una tabella normale. '[nome] [tipo di dati] DEFAULT N'value'' –

risposta

6

Utilizzare la sintassi normale (vedi CREATE TYPE, MSDN):

(Come notato nei commenti alla mia risposta sintassi corretta normale sarebbe quella di utilizzare i vincoli di nome, ma i tipi di tabella non può utilizzare il nome vincolo e hanno usare la sintassi "stenografia").

CREATE TYPE [dbo].[MyDefineType] As Table     
(
    ID int NOT NULL DEFAULT 0 
, Column1 int NOT NULL DEFAULT 99 
, Column2 Nvarchar(128) NULL DEFAULT N'DefaultValue' 
, Column3 Nvarchar(128) NULL 
, Column4 Nvarchar(128) NULL 
, Column5 Nvarchar(128) NULL  
) 

Ad esempio, utilizzando la definizione di cui sopra con valori predefiniti per le prime tre colonne:

DECLARE @t MyDefineType 
INSERT @t VALUES (1, DEFAULT, DEFAULT, N'c', N'd', N'e') 
SELECT * FROM @t 

ID Column1 Column2   Column3 Column4 Column5 
1 99  DefaultValue c  d  e 
+2

+1 ma, per essere onesti, è una stenografia necessaria per i tipi di tabella e le variabili di tabella, non la sintassi normale per le tabelle normali. La migliore pratica per le tabelle regolari dovrebbe essere quella di nominare il vincolo usando la sintassi esplicita 'CONSTRAINT ... DEFAULT ... FOR'. –

+0

@AaronBertrand Sì, è vero; forse ero un po 'troppo veloce. – jpw

+1

Sebbene le best practice non funzionino per i tipi di tabella in quanto non possono avere vincoli denominati. –

Problemi correlati