2017-10-19 74 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