7
最近我已阅读关于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”
预先感谢
你期望得到哪个错误? –
@GiorgosBetsos我希望像空值不能分配给变量 – Smart003
在SQL Server中,我们可以'声明'变量'*初始化*它(默认为'NULL')。所以它会使'UDT'的NOT NULL属性无效。不知道为什么它允许在UDT中提及NOT NULL属性。 –