2017-10-19 206 views
-1

我有一个任务,我必须在SQL Server管理器中完成。SQL约束电子邮件

我有一个数据库和一个名为User的表。在用户名下有一列名为e-mail的列。

该任务是为该表创建一个影响列电子邮件的新约束。

必须有一个唯一的 '@' 和最小的一个 '.'

不允许为任何特殊字符,如(!"#¤%等)< - 这不包括'@'和'。'

我试过一些不同的东西,但似乎无法使它工作。另外它应该被注意到,我是一个初学者。

感谢您的帮助

+8

至少*秀*您尝试。把作业问题倾倒在我们身上,期望我们做所有的工作对任何人都不是什么大事。在这些尝试不起作用的情况下也要描述 - 它们是否会产生错误?让你插入无效值?防止插入有效值?还有别的吗? –

+0

向我们展示您当前的代码尝试。 – jarlh

+0

我试过这个([电子邮件]像'%[email protected]__%.__%') 当我尝试输入电子邮件时,它说它不能使用,我不知道为什么。 –

回答

0

或者你可以用约束创建表,这样,将检查是否所有给定的条件满足。 请您的

更改表中的数据。如果表不存在

CREATE TABLE Persons (
ID int NOT NULL, 
LastName varchar(255) NOT NULL, 
FirstName varchar(255), 
Email varchar(255), 
CHECK (len(Email) - len(replace(Email,'@',''))=1 AND len(Email) - 
len(replace(Email,'.',''))=1 AND CHARINDEX('!',Email)!>0 AND 
CHARINDEX('#',Email)!>0 AND CHARINDEX('%',Email)!>0 AND 
CHARINDEX('¤',Email)!>0 AND CHARINDEX('"',Email)!>0) 
); 

一些拒绝输入

[email protected]!%#¤com

一些@一些。!%#com

[email protected]%#com

[email protected]#com

一些@一些@ COM

!一些@一些@ COM

等等

一些例外输入

[email protected]

[email protected]

[email protected]

[email protected]

等....

如果你已经有一个表,然后

GO 

ALTER TABLE [dbo].[Yourtablename] WITH CHECK ADD Constraint EmailConstraint CHECK (((len([Email])- 
len(replace([Email],'@','')))=(1) AND (len([Email])- 
len(replace([Email],'.','')))=(1) AND charindex('!',[Email])<=(0) AND 
charindex('#',[Email])<=(0) AND charindex('%',[Email])<=(0) AND 
charindex('¤',[Email])<=(0) AND charindex('"',[Email])<=(0))) 
GO 
+0

你好,谢谢,但我不明白你写的是什么xD 我必须将它添加到约束中,在那里我为表创建一个新的约束,而不是像查询中那样写下全部约束 –

+0

我的意思是你可以创建你的表,它已经有一个电子邮件的约束它用这个方法 – 2017-10-20 06:45:37

+0

请看最新的编辑 – 2017-10-20 06:50:51