今日はおならをしている。SQL Server(現在2008を使用)で、特定の一連の文字(約8つの大文字と小文字を区別する文字)のみを受け入れるように文字フィールドを設定するにはどうすればよいですか?そして、この「カスタムフィールド」をいくつかのテーブルで再利用する必要があります。
別のテーブルを設定して、外部キー制約を設定できることはわかっています。それが唯一の方法ですか?
今日はおならをしている。SQL Server(現在2008を使用)で、特定の一連の文字(約8つの大文字と小文字を区別する文字)のみを受け入れるように文字フィールドを設定するにはどうすればよいですか?そして、この「カスタムフィールド」をいくつかのテーブルで再利用する必要があります。
別のテーブルを設定して、外部キー制約を設定できることはわかっています。それが唯一の方法ですか?
If you use the double negative construct, this only allows chars A to H
ALTER TABLE MyTable WITH CHECK
CONSTRAINT CK_MyTable_MyColChars CHECK (
MyColChars COLLATE Latin1_General_BIN NOT LIKE '%[^ABCDEFGH]%'
)
For re-use, use a 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
)
If you wanted A_F, semi-colon and space it'd be '%[^ABCDEF; ]%'
for example
You'll probably want to look into creating a check constraint. This post has a matching pattern you could build off of:
How to make SQL Server 2008 Check Constraint of a table Allow Only Certain characters?
In order to get the case sensitive matching, remove 'a-z' in the pattern and create the check constraint with a case sensitive collation. This ensures case sensitive matching even if the server and database are case insensitive.