输入参数:xml数据类型 功能:新增和修改 --value() 方法从 XML 中检索 rogue 属性值。然后将该值分配给 int 变量。
--将 Member 节点拆分成多行
- SELECT T.c.query('.') AS result
- FROM @x.nodes('/root/Member') T(c);
/****** Object: Procedure [dbo].[UP_ConfScheduled_AddScheduledConf] Script Date: 2014-3-17 9:16:26 ******/ USE [ytSummitTeleConf_DB]; GO SET ANSI_NULLS ON; GO SET QUOTED_IDENTIFIER ON; GO /*============================================================= =============================================================*/ CREATE PROCEDURE [dbo].[UP_ConfScheduled_AddScheduledConf] @BookConf XML, @MemberList XML AS SET NOCOUNT ON /* --预约会议信息 <Root> <ConfRoom>4F3A595F-DCAF-49DD-806F-1E4BA0F58D33</ConfRoom> <SeqNo>254941</SeqNo> <MasterMebID>C8C71FAE-8365-4501-8EC0-4C32120A5CE3</MasterMebID> <ConfTitle>2014-2-2会议</ConfTitle> <BookTime>2014-1-17 0:00:00</BookTime> <ConfType>1</ConfType> <AddConfMode>0</AddConfMode> <WriteTime>2014-1-17 11:56:27</WriteTime> <Status>10</Status> <IsRecord>0</IsRecord> </Root> --预约会议成员列表 <Root> <Member> <Phoneno>01052810000,8312</Phoneno> <Name>主持人</Name> <Mode>1</Mode> <MebGuid>C8C71FAE-8365-4501-8EC0-4C32120A5CE3</MebGuid> <AddTime>2014-1-17 11:55:02</AddTime> <IsModerator>True</IsModerator> </Member> </Root> */ DECLARE @ConfRoom UNIQUEIDENTIFIER, @BookTime DATETIME SELECT @BookTime = T.c.value('(./BookTime/text())[1]', 'DATETIME'), @ConfRoom = T.c.value('(./ConfRoom/text())[1]', 'UNIQUEIDENTIFIER') FROM @BookConf.nodes('Root') AS T(c) IF EXISTS ( SELECT 1 FROM dbo.WTC_TB_BOOKCONF WHERE CONFROOM = @ConfRoom ) BEGIN UPDATE A SET A.BookTime = B.BookTime, A.ConfTitle = B.ConfTitle, A.ConfType = B.ConfType, A.AddConfMode = B.AddConfMode, A.WRITETIME = B.WRITETIME, A.[Status] = B.[Status], A.IsRecord = B.IsRecord, A.MasterMebID = B.MasterMebID FROM dbo.WTC_TB_BOOKCONF A INNER JOIN ( SELECT BookTime = @BookTime, SeqNo = T.c.value('(./SeqNo/text())[1]', 'INT'), ConfRoom = @ConfRoom, ConfTitle = T.c.value('(./ConfTitle/text())[1]', 'VARCHAR(256)'), ConfType = T.c.value('(./ConfType/text())[1]', 'TINYINT'), AddConfMode = T.c.value('(./AddConfMode/text())[1]', 'TINYINT'), WRITETIME = T.c.value('(./WriteTime/text())[1]', 'DATETIME'), [Status] = T.c.value('(./Status/text())[1]', 'TINYINT'), IsRecord = T.c.value('(./IsRecord/text())[1]', 'TINYINT'), MasterMebID = T.c.value('(./MasterMebID/text())[1]', 'UNIQUEIDENTIFIER') FROM @BookConf.nodes('Root') AS T(c) ) B ON A.CONFROOM = B.ConfRoom END ELSE BEGIN INSERT INTO WTC_TB_BOOKCONF ( BOOKTIME, SeqNo, CONFROOM, CONFTITLE, CONFTYPE, ADDCONFMODE, WRITETIME, [STATUS], IsRecord, MasterMebID ) SELECT BookTime = T.c.value('(./BookTime/text())[1]', 'DATETIME'), SeqNo = T.c.value('(./SeqNo/text())[1]', 'INT'), @ConfRoom, ConfTitle = T.c.value('(./ConfTitle/text())[1]', 'VARCHAR(256)'), ConfType = T.c.value('(./ConfType/text())[1]', 'TINYINT'), AddConfMode = T.c.value('(./AddConfMode/text())[1]', 'TINYINT'), WRITETIME = T.c.value('(./WriteTime/text())[1]', 'DATETIME'), [Status] = T.c.value('(./Status/text())[1]', 'TINYINT'), IsRecord = T.c.value('(./IsRecord/text())[1]', 'TINYINT'), MasterMebID = T.c.value('(./MasterMebID/text())[1]', 'UNIQUEIDENTIFIER') FROM @BookConf.nodes('Root') AS T(c) END IF EXISTS ( SELECT 1 FROM dbo.WTC_TB_BOOKCONFQUEUE WHERE CONFROOM = @ConfRoom ) BEGIN UPDATE dbo.WTC_TB_BOOKCONFQUEUE SET BOOKTIME = @BookTime WHERE CONFROOM = @ConfRoom END ELSE BEGIN INSERT INTO dbo.WTC_TB_BOOKCONFQUEUE ( CONFROOM, BOOKTIME, [STATUS] ) VALUES ( @ConfRoom, @BookTime, 0 ) END IF EXISTS ( SELECT 1 FROM dbo.WTC_TB_BOOKMEMBER WITH(NOLOCK) WHERE CONFROOM = @ConfRoom ) BEGIN DELETE dbo.WTC_TB_BOOKMEMBER WHERE CONFROOM = @ConfRoom END INSERT INTO dbo.WTC_TB_BOOKMEMBER ( MebID, CONFROOM, PHONENO, PHONENOTE, MEMBERTYPE ) SELECT MebGuid = T.c.value('(./MebGuid/text())[1]', 'UNIQUEIDENTIFIER'), ConfRoom = @ConfRoom, Phoneno = T.c.value('(./Phoneno/text())[1]', 'VARCHAR(32)'), Name = T.c.value('(./Name/text())[1]', 'VARCHAR(128)'), Mode = T.c.value('(./Mode/text())[1]', 'TINYINT') FROM @MemberList.nodes('Root/Member') AS T(c) GO