2017-06-12 30 views
7

Gần đây tôi đã đọc về UDT. tôi đã tạo ra một loại nhưng tôi có một vấn đề với cái đó. hãy nhìn vào những điều sauThay vì ném khối kiểu lỗi thực hiện thành công

---drop type ssn 
CREATE TYPE ssn 
FROM VARCHAR(11) NOT NULL; 

DECLARE @er ssn; 

IF Object_id('TEMPDB.DBO.#ter', 'U') IS NOT NULL 
    DROP TABLE #ter; 

CREATE TABLE #ter (
    PERIOD_SID INT 
    ,PERIOD_QUAR VARCHAR(10) PRIMARY KEY (PERIOD_SID) 
    ) 

INSERT INTO #ter (
    PERIOD_SID 
    ,PERIOD_QUAR 
    ) 
SELECT * 
FROM (
    VALUES (
     (1) 
     ,(@er) 
     ) 
    ) V(p, q) 

Tôi đã tạo ra một loại SSN với varchar (11) không null, và chạy một logic ở trên, nó thực hiện thành công enter image description here

Theo giả thiết của tôi nó nên ném một lỗi.

Tôi cần biết lý do tại sao logic trên hoạt động thành công.

EDIT

theo đề nghị của tôi đã thêm UDT này như một cột trong máy chủ AQL, vì trong oracle chúng ta có thể tạo ra một cột với bộ sưu tập tương tự như UDT

IF Object_id('TEMPDB.DBO.#ter1', 'U') IS NOT NULL 
    DROP TABLE #ter1; 

CREATE TABLE #ter1 (
    PERIOD_SID INT 
    ,PERIOD_QUAR ssn PRIMARY KEY (PERIOD_SID) 
    ) 

enter image description here

Đã xảy ra lỗi trong khi tạo bảng cho biết không có kiểu dữ liệu như vậy "ssn"

Cảm ơn trước

+0

Lỗi nào bạn mong đợi nhận được? –

+0

@GiorgosBetsos Tôi muốn mong đợi như giá trị null không thể gán cho biến số – Smart003

+1

Trong SQL Server, chúng ta có thể 'khai báo' một 'biến' với * khởi tạo * nó (mặc định là' NULL'). Vì vậy, nó che giấu thuộc tính 'NOT NULL' của' UDT'. Bạn không chắc chắn lý do tại sao nó được phép đề cập đến thuộc tính NOT NULL trong UDT. –

Trả lời

1

Dưới đây là thông số reason

Các null_type chỉ xác định giá trị null mặc định cho loại dữ liệu này. Nếu nullability được xác định rõ ràng khi dữ liệu bí danh loại được sử dụng trong khi tạo bảng, nó được ưu tiên hơn xác định vô hiệu.

Điều này được lấy từ sp_addtype nhưng cũng phải giống với trường hợp CREATE TYPE. sp_addtype cũng được sử dụng để tạo kiểu dữ liệu do người dùng xác định

Trong trường hợp của bạn, chúng tôi không thể tạo biến số sẽ không chấp nhận các giá trị NOT NULL. Vì vậy, tôi nghĩ rằng tài sản bị ghi đè

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