用户定义的数据类型的用户定义规则不起作用
User defined Rules on user defined data type doesn't work
我想用检查规则来定义一个新的用户定义数据类型来限制它的值,比方说,
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
的最终值没有弹出任何错误,就好像规则不存在一样。为什么?
经过一些研究,我发现在创建变量时没有检查规则。当您尝试将值插入具有已定义类型的列的 table 时,将检查它们。试试下面的脚本,看看它会产生错误:
create table tbl(col uType);
insert into tbl values ('ba'), ('A1')
select * from tbl
但这种方法已被弃用,建议不要使用它:Rules are deprecated, what's instead (TSQL)?
我想用检查规则来定义一个新的用户定义数据类型来限制它的值,比方说,
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
的最终值没有弹出任何错误,就好像规则不存在一样。为什么?
经过一些研究,我发现在创建变量时没有检查规则。当您尝试将值插入具有已定义类型的列的 table 时,将检查它们。试试下面的脚本,看看它会产生错误:
create table tbl(col uType);
insert into tbl values ('ba'), ('A1')
select * from tbl
但这种方法已被弃用,建议不要使用它:Rules are deprecated, what's instead (TSQL)?