而不是抛出错误类型块成功执行
问题描述:
最近我已阅读关于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)
我创建VARCHAR(11)为ssn一种不为空,跑到上面的一个逻辑,它成功地执行
按我的设想,应该抛出错误。
我需要知道为什么上述逻辑成功运行。
编辑
按照建议,我已经加入此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)
)
创建表时遇到错误,表示没有此类数据类型“ssn”
预先感谢
答
这里是reason
的null_type参数只定义的默认为空此 数据类型。如果在创建表格时使用别名数据 类型时明确定义了可空性,则优先于定义的可空性的 。
这取自sp_addtype
,但它应该与CREATE TYPE
相同。 sp_addtype
也用于创建用户定义的数据类型
在您的情况下,我们无法创建一个不接受NOT NULL
值的变量。所以我认为该属性被覆盖
你期望得到哪个错误? –
@GiorgosBetsos我希望像空值不能分配给变量 – Smart003
在SQL Server中,我们可以'声明'变量'*初始化*它(默认为'NULL')。所以它会使'UDT'的NOT NULL属性无效。不知道为什么它允许在UDT中提及NOT NULL属性。 –