2017-02-17 112 views
5

我想知道爲什麼,當我在SQL Server基於非空整數創建自定義數據類型時,我將它分配給默認值值,當它不是一個表定義(只是一個聲明的變量)時,我無法獲得該值。 這裏是我的代碼:SQL Server自定義非空數據類型默認值爲空

BEGIN TRAN; 
GO 
CREATE TYPE Province FROM INT NOT NULL; 
GO 
CREATE DEFAULT ProvinceDefault AS 4; 
GO 
EXEC sp_bindefault 
'ProvinceDefault', 
'Province'; 
GO 
DECLARE @Province Province; 
SELECT @Province; 
GO 
ROLLBACK TRAN; 

它返回NULL

+2

這是'DEFAULT'對象只是性質,只適用於列。 [MSDN](https://msdn.microsoft.com/en-us/library/ms173565.aspx)states *「綁定到列或別名數據類型時,默認值指定要插入到列中的值在插入過程中沒有顯式提供任何值時,綁定對象(或者在所有列中,如果是別名數據類型)。*「。無法爲變量指定默認值。值得注意的是'CREATE DEFAULT'已被棄用,所以你應該避免一起使用它。 – GarethD

回答

0

MSDN: -

[@ objname表=] 'OBJECT_NAME'

是表和列或別名數據類型的名稱默認值將被綁定到。 object_name是nvarchar(776),沒有默認值。 使用varchar(max),nvarchar(max),varbinary(max),xml或CLR user-defined types無法定義object_name

鏈接:https://msdn.microsoft.com/en-us/library/ms177503.aspx

+0

雖然它不是** CLR **用戶定義的類型,所以這似乎不相關。 「sp_bindefault」對於OP來說工作正常,並且確實如此。問題在於,將默認值應用於變量不是它所做的事情之一,也不是可以完成的事情。 – GarethD