创建一个替代插入触发器来阻止AW数据库中的某些值?

时间:2014-02-22 00:07:17

标签: sql

我是SQL的新手,如果我写错了什么但是我想为AdventureWorks中的Person.Address表创建一个INSTEAD OF触发器,这样任何时候有人插入一个不以数字开头的值在AddressLine1列中,它返回一条消息“无效,值必须包含数字”。

有人可以为此编写代码吗?感谢。

这是我设法编写的,但它仍然接受AddressLine1列中没有数字的地址,我做错了什么?

CREATE TRIGGER trg_PersonAddress_AfterInsert
ON Person.Address
INSTEAD OF INSERT
AS
BEGIN
IF EXISTS (SELECT AddressLine1 FROM Person.Address
WHERE AddressLine1 LIKE '[0-9]%')
INSERT INTO Person.[Address] (AddressID,AddressLine1,AddressLine2,City,StateProvinceID,PostalCode,SpatialLocation,rowguid,ModifiedDate)
SELECT AddressID,AddressLine1,AddressLine2,City,StateProvinceID,PostalCode,SpatialLocation,rowguid,ModifiedDate
FROM inserted
ELSE
PRINT 'Invalid must contain numbers'
END;

1 个答案:

答案 0 :(得分:0)

她是我用于我的网站的代码,所以人们必须有3个,然后是3到9个字符:

^[0-9]{3}[A-Za-z]{3,9}$

要打破它:

^ is an opener
[0-9] tells it to accept numbers 0-9
{3} advises to accept 3 numbers of the previous statement [0-9]
[A-Za-z] tells it to accept letters A-Z in caps and a-z in lowercase
{3,9} tells it  to accept 3 to 9 letters from the previous statement
$ is a closer

您需要以下内容:

 ^[0-9]{1,5}[A-Za-z]{1,20}$

这将允许1到5个didgets和1到20个没有空格的charicters Ex:1A或12345Abcdefghijklmnop

要使所有数字都尝试:

^[0-9]{1-10}$

这将允许数字1-9和1-10的总数Ex:1或12或123或1234或12345或123456或1234567或12345678或123456789或1234567890 如果我能帮助我,请告诉我