チェック制約とは:
チェック制約は、1つ以上の列で受け入れられる値を制限します。リアルタイムシナリオでのチェック制約を理解しましょう。
あなたはSQLServer開発者として働いています。FName、LName、Addressなどの列を持つdbo.Customerテーブルを作成する必要があります。 FNameはVARCHARになるため、ユーザーはアルファベット、数字、その他の文字を含む文字列値を挿入できます。 FNameがアルファベットのみを受け入れるようにチェック制約を記述したい。解決策:
以下のスクリプトを使用して、チェック制約を使用してテーブルを作成しましょう--Create Table with use YourDatabaseName go Create table dbo.Customer ( FName VARCHAR(100) Not Null, LName VARCHAR(100), StreetAddress VARCHAR(255), Check (FName not like '%[^a-z]%') )
テーブルにいくつかのレコードを挿入して、チェック制約が期待どおりに機能しているかどうかを確認しましょう。 FNameにアルファベットのみが含まれているレコードのみを挿入する必要があります。
--insert some sample records insert into dbo.Customer (FName,LName,StreetAddress) Values ('Aamir','Shahzad','xyz address') go insert into dbo.Customer (FName,LName,StreetAddress) Values ('Aamir4','Shahzad','xyz address') go insert into dbo.Customer (FName,LName,StreetAddress) Values ('abc3c','Shahzad','xyz address') go insert into dbo.Customer (FName,LName,StreetAddress) Values ('-tName','Shahzad','xyz address')上記の挿入スクリプトを実行したときに、SQLServerから受信したメッセージは次のとおりです。
(1行が影響を受けます)
メッセージ547、レベル16、状態0、行18
INSERTステートメントがCHECK制約「CK__Customer__FName__5FB337D6」と競合しました。データベース"YourDatabaseName"、テーブル "dbo.Customer"、列'FName'で競合が発生しました。
ステートメントは終了しました。
メッセージ547、レベル16、状態0、行22
INSERTステートメントがCHECK制約「CK__Customer__FName__5FB337D6」と競合しました。データベース「YourDatabaseName」、テーブル「dbo.Customer」、列「FName」で競合が発生しました。
ステートメントは終了しました。
メッセージ547、レベル16、状態0、行26
INSERTステートメントがCHECK制約「CK__Customer__FName__5FB337D6」と競合しました。データベース"YourDatabaseName"、テーブル "dbo.Customer"、列'FName'で競合が発生しました。
ステートメントは終了しました。
すべてのアルファベットを含む最初のレコードのみが挿入されました。 FName、残りのレコードはアルファベット以外の文字が含まれているため、チェック制約によって拒否されます。
テーブルのデータをチェックして、単一のレコードのみが挿入されていることを確認しましょう。
SQLServerのチェック制約とは何ですか。SQLServerでチェック制約を作成する方法 |
ビデオデモ:チェック制約とは何ですか?SQLServerでチェック制約を作成する方法