最近我读到了关于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)
我创建了一个类型为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)
)
创建表时遇到错误,说没有这样的数据类型" ssn"
提前致谢
答案 0 :(得分:1)
以下是reason
null_type参数仅定义此的默认可为空性 数据类型。如果在别名数据中明确定义了为空性 在表创建期间使用type,它优先于 定义了可空性。
这取自sp_addtype
,但与CREATE TYPE
的情况应该相同。 sp_addtype
还用于创建用户定义的数据类型
在您的情况下,我们无法创建不接受NOT NULL
值的变量。所以我认为该属性被覆盖了