Sql server 客户电子邮件地址
我是sql编程新手。这是我数据库课的家庭作业。我已经准备好了作业所需的所有桌子,我只挂了一部分。作业中的一行内容如下: 如果类型为“教员”,则电子邮件地址必须以“@xxx.edu”结尾 这是该表的外观:Sql server 客户电子邮件地址,sql-server,Sql Server,我是sql编程新手。这是我数据库课的家庭作业。我已经准备好了作业所需的所有桌子,我只挂了一部分。作业中的一行内容如下: 如果类型为“教员”,则电子邮件地址必须以“@xxx.edu”结尾 这是该表的外观: create table customer ( CID# char(10) primary key IDENTITY (1,1) NOT NULL, F_name varchar(20), M_name varchar(20), L_name varchar(20), type varchar(
create table customer
(
CID# char(10) primary key IDENTITY (1,1) NOT NULL,
F_name varchar(20),
M_name varchar(20),
L_name varchar(20),
type varchar(20),
street varchar(20),
city varchar(20),
state varchar(20),
zip char(5),
password varchar (20) NOT NULL,
email varchar(20) NOT NULL
Constraint CK_customer_type check (type in ('student', 'faculty'))
)
如果有人能提供帮助,我们将不胜感激 此约束将检查电子邮件列是否以
@xxx.edu
结尾
Constraint CK_email_faculty check (
type<>'faculty' OR
CHARINDEX('@xxx.edu',email)=LEN(email)-LEN('@xxx.edu')+1
)
在客户
表中有一个外键,指向客户类型
表:
CREATE TABLE customer(
-- ...
type INT NOT NULL,
-- ...
CONSTRAINT FK_type_customer_type FOREIGN KEY(type) REFERENCES customer_type(id)
)
然后,您将不会插入类型描述,而是插入类型标识符:
INSERT INTO customer(...,type,...)VALUES(...,1,...); -- for student
INSERT INTO customer(...,type,...)VALUES(...,3,...); -- fails, type doesn't exist
这样,当SQL Server缓存这些表时,可以节省磁盘空间和内存
备注2:varchar字段的宽度非常小。只有20个字符的电子邮件地址?添加限制
Constraint CK_email check (email like case when type in ('faculty') then '%@xxx.edu' else email end )
对于您的特定情况,这样的约束可能是可以的:
Constraint CK_customer_email check (
type <> 'faculty' OR
email LIKE '%_%@_%.edu'
CHARINDEX('@xxx.edu',email)=LEN(email)-LEN('@xxx.edu')+1
)
然后,您的约束将如下所示:
Constraint CK_customer_email check (
type <> 'faculty' OR
[dbo].[fnAppEmailCheck] (email) = 1
)
Constraint检查客户电子邮件检查(
输入“教员”或
[dbo].[fnAppEmailCheck](电子邮件)=1
)
您的问题是什么?您具体需要哪些帮助?我想问题是:如何设置电子邮件地址列的约束?
CREATE FUNCTION [dbo].[fnAppEmailCheck](@email VARCHAR(255))
--Returns true if the string is a valid email address.
RETURNS bit
as
BEGIN
DECLARE @valid bit
IF @email IS NOT NULL
SET @email = LOWER(@email)
SET @valid = 0
IF @email like '[a-z,0-9,_,-]%@[a-z,0-9,_,-]%.[a-z][a-z]%'
AND LEN(@email) = LEN(dbo.fnAppStripNonEmail(@email))
AND @email NOT like '%@%@%'
AND CHARINDEX('.@',@email) = 0
AND CHARINDEX('..',@email) = 0
AND CHARINDEX(',',@email) = 0
AND RIGHT(@email,1) between 'a' AND 'z'
SET @valid=1
RETURN @valid
END
Constraint CK_customer_email check (
type <> 'faculty' OR
[dbo].[fnAppEmailCheck] (email) = 1
)