最近我读到了有关 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
The null_type parameter only defines the default nullability for this data type. If nullability is explicitly defined when the alias data type is used during table creation, it takes precedence over the defined nullability.
这取自sp_addtype
,但它应该与CREATE TYPE
的情况相同。 sp_addtype
还用于创建用户定义的数据类型
就您的情况而言,我们无法创建不接受 NOT NULL
值的变量。所以我认为该属性已被覆盖
关于sql - 而不是抛出错误类型 block 执行成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44492620/