は、私は、SQLエラーにこのエラーのLINQを取得しています - "String must be exactly one character long"空の文字列を許可しないようにSQL Serverテーブルに制約を設定できますか?
がnull許可する(1)フィールドNULL可能varchar型に制約を置くが、空の文字列を許可しないことは可能ですか?
は、私は、SQLエラーにこのエラーのLINQを取得しています - "String must be exactly one character long"空の文字列を許可しないようにSQL Serverテーブルに制約を設定できますか?
がnull許可する(1)フィールドNULL可能varchar型に制約を置くが、空の文字列を許可しないことは可能ですか?
はい - ちょうどCHECK制約を使用します。
ALTER TABLE myTable
ADD CONSTRAINT CK_table_colHasLength CHECK (col1 IS NULL OR col1 <> '')
あなたは、あなたが次の制約を使用して検討する必要がありますスペースしか含まれないものとして空の文字列を定義する場合。かかわらず、それが含まれているどのように多くの - 文字列にスペースのみが含まれている場合len()
関数は0を返すこと
ALTER TABLE myTable ADD CONSTRAINT CK_table_colHasLength CHECK
(col1 is null or len(col1) != 0)
は注意してください。
これはDB側の問題ではありません。 VS2008のLinq-to-SQLデザイナには、varchar(1)とnvarchar(1)がSystem.StringではなくSystem.Charに誤ってマップされるマッピングバグがあります。空の文字列はvarchar(1)とnvarchar(1)の完全に有効な値ですが、System.Charは空の文字列を許可しません。
回避策として、L2Sデザイナのマッピングを影響を受けるフィールドのSystem.CharからSystem.Stringに変更できます。
を参照してください:あなたは、システム上の制約が必要な場合
http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/e8082fc1-a5be-47bf-9b06-cd1bde19bea0
...と...
http://social.msdn.microsoft.com/Forums/en-US/linqtosql/thread/ac91e587-6e91-454c-9fa2-bab20b7a258c
、その制約はないコードだけで、システムにどこでも永続する必要があります。 – Rhyous