今天我有一個腦屁。在SQL Server中(目前使用2008),如何設置char字段來僅接受特定的一系列字符(大致是8個區分大小寫的字母)?我需要在幾張表中重新使用這個「自定義字段」。如何設置約束以將Char字段限制爲一組值?
我知道我可以設置另一個表並在其上放置外鍵約束。這是唯一的方法嗎?
今天我有一個腦屁。在SQL Server中(目前使用2008),如何設置char字段來僅接受特定的一系列字符(大致是8個區分大小寫的字母)?我需要在幾張表中重新使用這個「自定義字段」。如何設置約束以將Char字段限制爲一組值?
我知道我可以設置另一個表並在其上放置外鍵約束。這是唯一的方法嗎?
如果使用雙重否定結構,這種只允許字符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; ]%'
例如
我希望我能給你80年代的圖片,m魚和所有的另一個+1! – 2011-05-13 15:39:43
你可能會想看看創建一個檢查約束。這篇文章有,你可以建立過的匹配模式:
How to make SQL Server 2008 Check Constraint of a table Allow Only Certain characters?
爲了得到區分大小寫的匹配,在模式中刪除「A-Z」,並創建一個區分大小寫的排序規則的檢查約束。這確保了區分大小寫的匹配,即使服務器和數據庫不區分大小寫。
我們需要一點(好的,很多)關於你試圖定義的約束性質的更多細節。只有A-Z?區分大小寫?嵌入式空間?特定系列的字符? – 2011-05-13 14:17:44
@飛利浦對不起。我剛剛更新了我的問題。 – 2011-05-13 14:35:34