5

私は現在、の主キーフィールドを持っていnvarchar(50)ます。空白を受け入れないようにすることができれば、タイプを変更したいと思います。とにかくこれを行うことはありますか?

次のことを許可する必要があります。

------
AAAA
BBBB
CCCC

次のことを許可しないでください。

------
AA AAA
BBBB B
C CCCC
4

1 に答える 1

6

次のチェック制約を追加できます。

CHECK LEN(col) = LEN(REPLACE(col, ' ', ''));

...また...

CHECK (col NOT LIKE '% %');

...また...

CHECK (CHARINDEX(' ', col) = 0)

例:

USE tempdb;
GO

CREATE TABLE dbo.bar(foo NVARCHAR(50) PRIMARY KEY);

ALTER TABLE dbo.bar ADD CONSTRAINT chkNoSpaces
 CHECK (foo NOT LIKE '% %');

成功:

INSERT dbo.bar(foo) SELECT 'AAAA';
GO

失敗:

INSERT dbo.bar(foo) SELECT 'AA AA';
GO

結果:

メッセージ547、レベル16、状態0、1行
目INSERTステートメントがCHECK制約「chkNoSpaces」と競合していました。データベース「tempdb」、テーブル「dbo.bar」、列「foo」で競合が発生しました。
ステートメントは終了されました。

掃除:

DROP TABLE dbo.bar;

編集

何らかの理由でUIを介してこれを行う必要がある場合(ここでも、アトミック、繰り返し可能、ファイルへの保存、ソース管理への保存などを行うことができるスクリプトを使用してこれを行うことをお勧めします):

  1. オブジェクトエクスプローラーで、テーブルを右クリックして[Design
  2. 上のグリッドで列を右クリックして、Check Constraints...
  3. クリックAdd
  4. [式column_name NOT LIKE '% %']ボックスに入力します(ではなく、実際の列名を使用しますcolumn_name
  5. 制約に違反するデータがすでにあると思われる場合は、[既存のデータを確認...]のオプションを次のように変更しますNo(そしてすぐにそのデータを修正します)
  6. クリックClose
  7. ツールバーの「保存」アイコンをクリックします

UIが実際に句の構成を変更することに注意してください。(NOT col_name LIKE '% %')

于 2012-05-22T18:51:33.797 に答える