"タイプ"が0の場合、テーブルBに人を追加することができますが、そうでない場合は "タイプ"の列がテーブルBにないはずです。 複数のテーブルのSQLチェック制約
1
A
答えて
0
これは、外部キー制約といくつかのトリッキーで行うことができます。 type
とperson
の両方のためにTableA
にユニーク制約を設定
まず、:
alter table TableA add constraint unq_TableA_type_person on TableA(type, person);
これは、あなたがセット外部キー制約を設定することができます。ただし、type
列が必要です。
alter table TableB add constraint fk_tableA_type_person
foreign key (type_for_a, person) references tableA(type, person);
出来上がり:
alter table TableB add type_for_a as (0); -- it is always 0
は今、ちょうど外部キー制約を使用します。そのためには、計算列を使用することができます!コードを記述する必要はありません。
0
CREATE TABLE T1 (TypeID INT NOT NULL, people VARCHAR(50));
GO
CREATE TABLE T2 (people VARCHAR(50));
GO
-- creating trigger to insert on the behalf when there is a particular type
CREATE TRIGGER dbo.AfterInsertTrigger
ON T1
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
declare @id int,
@someval char(1)
insert into dbo.T2
select i.people FROM Inserted i
where i.TypeID=0 -- checks only when the id is 0
END
GO
-- inserting people with different id s into Table1
INSERT T1 (TypeID, people) SELECT 1, 'A';
INSERT T1 (TypeID, people) SELECT 0, 'B';
GO
--selecting from tables see what got affected.
select * from T1
select *from T2
--Clean up
DROP TABLE T2;
DROP TABLE T1;
GO
関連する問題
- 1. SQL制約複数テーブル
- 2. のOracle SQL制約をチェック!=他のテーブル
- 3. DB2 SQLチェック制約
- 4. チェックSQLの制約が
- 5. SQL Serverのチェック制約ロジック
- 6. Oracle Sqlのチェック制約
- 7. チェック制約内のSQLサブクエリ
- 8. 複数のテーブルレベルでOracle SQLチェック制約を追加
- 9. SQL Server 2012 - チェック制約
- 10. 他のテーブルを照会するSQL Serverのチェック制約
- 11. 2つのテーブル間のOracle SQLチェック制約
- 12. 参照テーブルのSQL制約
- 13. 複合プライマリキーの一部に対するSQL Serverのチェック制約
- 14. SQL DDL - 2属性のチェック制約
- 15. SQL Serverチェック制約の照会
- 16. SQLの制約をチェックする
- 17. 制約のチェック
- 18. SQLモデル/スキーマ設計、チェック制約、FKまたはテーブル再設計?
- 19. NHibernateのチェック制約
- 20. SQL制約チェックまたはトリガー?
- 21. 複合ユニーク制約SQL
- 22. SQL複雑なユニーク制約
- 23. チェック制約
- 24. チェック制約
- 25. チェック制約
- 26. チェック制約
- 27. :複数カラムのユニーク制約
- 28. 複数の型制約
- 29. 複数の主キー制約?
- 30. SQL Server:テーブル変数の作成、プライマリキー制約定義のエラー
'代わりにトリガーof'私は基本的に'変更テーブルの上にTableBの制約fk_tableA_type_person 外部キー(type_for_a、人を追加...少し混乱しましたあなた –