2010-05-27 63 views

回答

4

你也許可以用做在列上check constraint東西。雖然LIKE(如下面的AakashM所述)足夠聰明,但T-SQL本身不具有正則表達式功能。要獲得完整的正則表達式功能,您可以使用CLR integration來包裝.Net正則表達式函數,然後用UDF包裝正則表達式,並使用檢查約束來調用該函數以評估該列的內容。

這裏的another article關於使用CLR UDF進行T-SQL中的正則表達式匹配。

+2

你可以用'LIKE'做點什麼嗎?說'檢查'該列是不是[^ a-zA-Z90-9]'? – AakashM 2010-05-27 09:20:25

+0

這是可能的,SQL有範圍[]運算符,請參閱mine和AakashM的方法。 – Meff 2010-05-27 09:40:57

+0

@AakashM - 同意。 LIKE可能會對OP的要求足夠聰明。 – ConcernedOfTunbridgeWells 2010-05-27 11:09:54

2

您可以在目標表上使用觸發器並在執行插入操作之前驗證輸入。

Read more about triggers

+0

但是如果插入次數很多,會影響性能嗎? – 2010-05-27 09:43:20

2

毆打由AakashM衝頭,而我在寫這一點,但這裏的代碼反正:

CREATE TABLE #Table 
(
    Data VARCHAR(50) NOT NULL CHECK(Data NOT LIKE '%[^a-zA-Z90-9]%') 
) 

INSERT INTO #Table(Data) 
VALUES ('123abc') 

GO 

INSERT INTO #Table(Data) 
VALUES ('123_abc') 

GO 

SELECT * FROM #Table 

DROP TABLE #Table 

注意,表達的是一個雙重否定,所以「不喜勿(AZ或0-9) 「所以%符號會在插入的字符串的任何位置捕獲違規。

相關問題