2017-02-17 20 views
5

Tôi muốn biết tại sao, khi tôi tạo kiểu dữ liệu tùy chỉnh trong SQL Server, dựa trên số nguyên không null và tôi gán nó cho mặc định giá trị, tôi không thể có được giá trị này khi nó không phải là một định nghĩa bảng (chỉ là một biến khai báo). Dưới đây là mã của tôi:SQL Server tùy chỉnh không null kiểu dữ liệu với giá trị mặc định là trả về 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; 

Nó trả NULL

+2

Nó chỉ là bản chất của đối tượng 'DEFAULT', nó chỉ áp dụng cho các cột. [MSDN] (https://msdn.microsoft.com/en-us/library/ms173565.aspx) nêu rõ * "Khi bị ràng buộc vào một cột hoặc một kiểu dữ liệu bí danh, một mặc định chỉ định một giá trị được chèn vào cột để mà đối tượng bị ràng buộc (hoặc vào tất cả các cột, trong trường hợp của một loại dữ liệu bí danh), khi không có giá trị nào được cung cấp rõ ràng trong khi chèn. * ". Không thể chỉ định giá trị mặc định cho biến. Nó cũng đáng chú ý rằng 'CREATE DEFAULT' không được chấp nhận, vì vậy bạn có lẽ nên tránh sử dụng tất cả cùng nhau. – GarethD

Trả lời

0

MSDN: -

[@ objname =] 'object_name'

là tên của bảng và cột hoặc các kiểu dữ liệu bí danh mà mặc định là bị ràng buộc. object_name là nvarchar (776) không có mặc định. object_name không thể được xác định với varchar (max), nvarchar (max), varbinary (max), xml hoặc CLR user-defined types.

Liên kết: https://msdn.microsoft.com/en-us/library/ms177503.aspx

+0

Mặc dù đây không phải là loại ** CLR ** do người dùng định nghĩa nên điều này dường như không có liên quan. 'sp_bindefault' đang làm việc tốt cho OP, và làm chính xác những gì nó cần. Vấn đề là áp dụng một mặc định cho một biến không phải là một trong những điều nó làm, và nó không phải là cái gì đó có thể được thực hiện. – GarethD

Các vấn đề liên quan