用户定义的关于用户定义的数据类型的规则不起作用

时间:2019-01-25 06:41:37

标签: sql sql-server user-defined-types

我想用检查规则定义一个新的用户定义数据类型,以限制其值,例如

CREATE RULE dbo.test
AS
@a LIKE '[A-Z][0-9]'

然后我使用此规则创建用户类型:

CREATE TYPE [dbo].[uType] FROM [varchar](2) NULL

EXEC sys.sp_bindrule @rulename=N'[dbo].[test]', @objname=N'[dbo].[uType]'

然后对其进行测试:

declare @a uType
set @a = 'K1'
set @a = 'AB'
select @a

计算出@a的最终值,而不会弹出任何错误,就好像规则不存在一样。为什么?

1 个答案:

答案 0 :(得分:1)

经过一些研究,我发现创建变量时没有检查规则。当您尝试将值插入具有定义类型的列的表中时,将对它们进行检查。试试下面的脚本,看看它会产生错误:

HTTP_HEADERS = {}

但是不建议使用此方法,建议不要使用它:Rules are deprecated, what's instead (TSQL)?