2014-10-15 16 views
5

powiedzmy masz typ zdefiniowany przez użytkownika, który następuje:Składnia Wartości domyślne dla użytkownika typ zdefiniowany jako tabeli

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  
) 

Więc kiedy przeszedł wartościową stolik poprzez procedury przechowywanej, typ odzwierciedla schemat stół.

Moje pytanie brzmi: jaka jest składnia, aby jedna z kolumn miała wartość defertyczną? Na przykład, jeśli przekazałem te wartości przez procedurę przechowywaną w pętli, mógłbym nadać kolumnie 5 wartość domyślną, więc jeśli przekazałbym wartości tylko dla pierwszych 4 kolumn, 5 wykończyłoby to, co zdefiniowałem, aby było, jeśli nie wartość została przekazana. Czy to możliwe z typem zdefiniowanym przez użytkownika?

+1

samą składnię jako inline domyślne ograniczenia dla regularnych tabeli. '[nazwa] [typ danych] DEFAULT N'value''' –

Odpowiedz

6

Użyj normalnej składni (patrz CREATE TYPE, MSDN):

(Jak zauważył w komentarzach do mojej odpowiedzi właściwa składnia normalne byłoby użyć nazwanych ograniczeń, ale typy tabel nie mogą korzystać z imieniem i mają ograniczenia użyć "skróconej" składni).

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  
) 

Dla przykładu, stosując powyższą definicję z domyślnych na pierwszych trzech kolumnach:

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, ale, szczerze mówiąc, to skrót, który jest wymagany w przypadku typów tabel i zmiennych tabelarycznych, a nie w zwykłej składni zwykłych tabel. Najlepszą praktyką w przypadku zwykłych tabel powinno być nazwanie ograniczenia za pomocą jawnej składni "CONSTRAINT ... DEFAULT ... FOR". –

+0

@AaronBertrand Tak, to prawda; może byłem trochę za szybki. – jpw

+1

Chociaż najlepsza praktyka nie będzie działać dla typów tabel, ponieważ nie mogą mieć nazwanych więzów. –

Powiązane problemy