2016-09-22 69 views
0

如果存在数据到父表中则根据引用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,得不到回应列然后这些变化在上PersonH​​istory列PersonXML表,以反映自动会有人请找我的方式去实现它。

UPDATE Person SET RejectedDate = GETDATE(), RejectedBy= 100 WHERE PersonId = 1 
+0

对于PersonXML表,检查合并命令。它是专门为此设计的,如果没有找到匹配的记录或更新,可以使用内置的插入记录的情况。至于耦合这两个命令,可以将它写入过程,或者在Person表上实现一个触发器。取决于你喜欢什么。 –

+0

我是新来的XML可以提供MERGE命令到XML的URL,参考列是Person和PersonXML表是PersonId – Deepthi

回答

0
DECLARE @PersonId int,@RejectedDate datetime,@RejectedBy int    
SET @PersonId=1 
SET @RejectedDate=Getdate()+1 
SET @RejectedBy=105 
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 

IF Exists(SELECT * FROM Person WHERE [email protected]) 
BEGIN 
UPDATE Person 
SET 
RejectedDate [email protected] ,[email protected] 
WHERE [email protected] 
    UPDATE PersonXML 
    SET PersonHistory= 
    (SELECT PersonId    
      ,Name 
      ,SubMittedDate 
      ,SubmittedBy 
      ,ISNULL(RejectedDate,@RejectedDate) AS RejectedDate 
      ,ISNULL(RejectedBy,@RejectedBy) AS RejectedBy 
      FROM Person FOR XML PATH('PersonHistory') )WHERE [email protected] 
END 
    ELSE 
    BEGIN 
      INSERT INTO Person 
      Select @PersonId,'', GETDATE(),1,@RejectedDate,@RejectedBy 

    END 
SELECT * FROM Person 
SELECT * FROM PersonXML 
+0

希望这会帮助你 –

+0

我需要更新PersonXML表上的PersonH​​istory XML列,那些是XML属性。 – Deepthi

+0

现在看看 –

相关问题