2011-05-13 51 views
1

今天我有一個腦屁。在SQL Server中(目前使用2008),如何設置char字段來僅接受特定的一系列字符(大致是8個區分大小寫的字母)?我需要在幾張表中重新使用這個「自定義字段」。如何設置約束以將Char字段限制爲一組值?

我知道我可以設置另一個表並在其上放置外鍵約束。這是唯一的方法嗎?

+1

我們需要一點(好的,很多)關於你試圖定義的約束性質的更多細節。只有A-Z?區分大小寫?嵌入式空間?特定系列的字符? – 2011-05-13 14:17:44

+0

@飛利浦對不起。我剛剛更新了我的問題。 – 2011-05-13 14:35:34

回答

2

如果使用雙重否定結構,這種只允許字符A到H

ALTER TABLE MyTable WITH CHECK 
    CONSTRAINT CK_MyTable_MyColChars CHECK (
    MyColChars COLLATE Latin1_General_BIN NOT LIKE '%[^ABCDEFGH]%' 
    ) 

進行再利用,使用UDF

CREATE FUNCTION dbo.CheckChars (@Value varchar(100)) 
RETURNS bit 
AS 
BEGIN 
    RETURN (CASE WHEN @Value NOT LIKE '%[^ABCDEFGH]%' THEN 1 ELSE 0 END) 
END 
GO 

... CHECK (
     dbo.CheckChars (MyColChars) = 1 
    ) 

如果你想A_F,分號和空間它會是'%[^ABCDEF; ]%'例如

+0

我希望我能給你80年代的圖片,m魚和所有的另一個+1! – 2011-05-13 15:39:43

相關問題