而不是抛出错误类型块成功执行

Sma*_*003 7 sql sql-server sql-server-2012

最近我读到了UDT.我创建了一个类型,但我有一个问题.请查看以下内容

---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)
Run Code Online (Sandbox Code Playgroud)

我创建了一个类型为ssn,varchar(11)不为null,并运行上面的一个逻辑,它成功执行 在此输入图像描述

根据我的假设,它应该抛出一个错误.

我需要知道为什么上面的逻辑成功运行.

编辑

根据建议我已将此udt添加为AQL服务器中的列,因为在oracle中我们可以创建一个集合类似于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)
    )
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

创建表时遇到错误,说没有这样的数据类型"ssn"

提前致谢

Pரத*_*ீப் 1

原因如下

null_type 参数仅定义此数据类型的默认可为空性。如果在创建表期间使用别名数据类型时显式定义可为空性,则它优先于定义的可为空性。

这是取自sp_addtype但应该与 的情况相同CREATE TYPEsp_addtype也用于创建用户定义的数据类型

在您的情况下,我们无法创建一个不接受NOT NULL值的变量。所以我认为该属性已被覆盖