[英]SQL Server referential integrity add rows parent table
我有一張父母桌
ptable (pid int, name varchar(10)); where pid is the primary key
和
Child table ctable (pid int, cid int, cname varchar(10)); where pid references ptable.
ptable
只有2行
pid name
1 Sales
2 Marketing
使用C#應用程序,我正在從文本文件向ctable
插入行。 如果違反了參照完整性,我希望能夠在ptable
創建一行。 這可以做到嗎?
如前所述,這可以通過觸發器或其他方式完成。 您說您正在通過文本文件執行此操作。 我能夠執行此操作的唯一方法是將文本文件導入到臨時表中,並驗證包括父/子完整性規則的數據。 在執行子插入之前,一個簡單的“從ptable的pid:= pid中選擇count(id)作為總數”會告訴您父記錄是否存在。 然后,您可以對父表進行一次插入,然后對子表進行插入(如果不存在),或者如果父表存在,則可以直接插入子記錄。
某些系統具有偽父記錄,如果未在初始插入中找到父記錄,並且第二個字段臨時存儲了唯一ID,則使用該父記錄。 然后創建丟失的父記錄,並更新子記錄。 然后,將子表更新為類似於“ UPDATE child_table.parentid where some_field = mytempvalue”的正確值。 我通常最終將現有的文本字段用於臨時存儲,然后將parentId和文本字段更新為正確的值。
您可以使用INSTEAD OF INSERT觸發器來做到這一點:
CREATE TRIGGER trig_insert_ctable
ON ctable
INSTEAD OF INSERT
AS
BEGIN
Insert Into ptable
Select i.pid, '??'
From inserted i
Where not exists ( Select * From ptable p where p.pid = i.pid )
Insert Into ctable
Select * From inserted
END;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.