2017-02-17 10 views
5

でカスタムデータ型を作成する理由を知りたい場合は、NULL以外の整数に基づいてSQL Serverをベースにして、値は、私はテーブル定義(単一の宣言された変数)ではないときに、この値を取得することはできません。 は、ここに私のコードです:SQL ServerカスタムNULLでない既定値のデータ型がNULLを返す

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)で、デフォルトはありません。 object_nameは、varchar(max)、nvarchar(max)、varbinary(max)、xml、またはCLR user-defined typesを持つを定義することはできません。

リンク:https://msdn.microsoft.com/en-us/library/ms177503.aspx

+0

** CLR **のユーザー定義型ではありませんが、これは意味をなさないものです。 'sp_bindefault'はOPのためにうまくいきますし、まさにそれが必要なのです。問題は、変数にデフォルトを適用することは、それが行うことの1つではなく、実行できることではないということです。 – GarethD

関連する問題