LoginSignup
1
1

More than 5 years have passed since last update.

nvarcharの項目にvarcharでの長さで制限かける

Last updated at Posted at 2016-09-30

システム連携とかやっているとこんな状況があるかと思います。
1. テーブル設計をしている際、「文字列はnvarchar型で!」
2. 項目Aは別システムと連携する項目。連携先と同じ長さに。
3. 連携先の項目Aの型はvarchar型。
4. nvarchar型とvarchar型では、長さの数え方が違うから全角が混在したデータが入った場合、桁あふれ!?

というわけでこれの対応策。
CHECK制約を利用することで、nvarchar型でありながら、varchar型の文字数しか入らないようにDB側で制限かけるが可能です。

例:nvarchar(7)にて、varchar(7)で入る分しかいれないようにする。

CheckLengthVarchar.sql
ALTER TABLE [TABLE_AA] --テーブル名
 ADD CONSTRAINT [CK_TABLE_AA] --Check制約名
  CHECK (
    DATALENGTH( CONVERT(varchar(8), [TABLE_ID])) <= 7 --varchar型に変換し長さを比較
/* varcharはデフォルトで30桁になるので、必ず長さを記述する。
   その際は、制限したい長さよりも大きくすること */
  );
  • 定義が少々複雑になる。
  • Insert/Update時の性能が落ちる。

CHECK制約をつけることになるため、上記のデメリットもありますので、それを了承したうえで使用しましょう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1