如果存在数据到父表中则根据引用id更新XML列上的子表,否则插入行。如果存在更新XML列或在参考表中插入新行
CREATE TABLE Person
(
PersonId INT CONSTRAINT PK_Person_PersonId PRIMARY KEY,
Name VARCHAR(50),
SubMittedDate DATETIME,
SubmittedBy INT,
RejectedDate DATETIME,
RejectedBy INT
)
INSERT INTO Person VALUES(1, 'Sai', GETDATE(),1,null,null)
CREATE TABLE PersonXML
(
PersonXMLId INT IDENTITY(1,1) CONSTRAINT PK_PersonXML_PersonId PRIMARY KEY,
PersonId INT CONSTRAINT FK_PersonXML_Person FOREIGN KEY REFERENCES Person(PersonId),
Name VARCHAR(50),
PersonHistory XML
)
INSERT INTO PersonXML(PersonId,Name,PersonHistory)
SELECT PersonId
,Name
,(SELECT PersonId
,Name
,SubMittedDate
,SubmittedBy
,ISNULL(RejectedDate,0) AS RejectedDate
,ISNULL(RejectedBy, 0) AS RejectedBy
FROM Person FOR XML PATH('PersonHistory'))
FROM Person
SELECT * FROM Person
SELECT * FROM PersonXML
每当我更新表的人在RejectedDate,得不到回应列然后这些变化在上PersonHistory列PersonXML表,以反映自动会有人请找我的方式去实现它。
UPDATE Person SET RejectedDate = GETDATE(), RejectedBy= 100 WHERE PersonId = 1
对于PersonXML表,检查合并命令。它是专门为此设计的,如果没有找到匹配的记录或更新,可以使用内置的插入记录的情况。至于耦合这两个命令,可以将它写入过程,或者在Person表上实现一个触发器。取决于你喜欢什么。 –
我是新来的XML可以提供MERGE命令到XML的URL,参考列是Person和PersonXML表是PersonId – Deepthi