簡體   English   中英

SQL Server參照完整性添加行父表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM