zoukankan      html  css  js  c++  java
  • SQL存储过程-新增和修改,参数Xml数据类型

    输入参数: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
    View Code


    取消预约会议-事务处理

    /****** Object: Procedure [dbo].[UP_ConfScheduled_CancelScheduledConf]   Script Date: 2014-3-17 9:23:26 ******/
    USE [ytSummitTeleConf_DB];
    GO
    SET ANSI_NULLS ON;
    GO
    SET QUOTED_IDENTIFIER ON;
    GO
    
    /*=============================================================
    
    =============================================================*/
    CREATE PROCEDURE [dbo].[UP_ConfScheduled_CancelScheduledConf]
        @SeqNo INT,
        @ConfRoom UNIQUEIDENTIFIER
    AS
    SET NOCOUNT ON
    
    IF NOT EXISTS
    (
        SELECT 1
        FROM dbo.WTC_TB_BOOKCONF WITH(NOLOCK)
        WHERE CONFROOM = @ConfRoom
            AND [STATUS] = 0
    )
    BEGIN
        RETURN -1    --预约会议不存在.
    END
    
    IF EXISTS
    (
    
        SELECT 1
        FROM dbo.WTC_TB_USERCONF WITH(NOLOCK)
        WHERE CONFROOM = @ConfRoom
    )
    BEGIN
        RETURN -2    --会议已经召开.
    END
    
    BEGIN TRY
        BEGIN TRAN
    
        --取消预约
        UPDATE dbo.WTC_TB_BOOKCONF
        SET [STATUS] = 3
        WHERE CONFROOM = @ConfRoom
            AND [STATUS] = 0
    
        --删除预约队列
        DELETE dbo.WTC_TB_BOOKCONFQUEUE
        WHERE CONFROOM = @ConfRoom
    
        --保留预约会议信息,以便统计短信等费用
        INSERT INTO dbo.WTC_TB_USERCONF
        (
            CONFROOM,
            SeqNo,
            CONFTITLE,
            CONFTIME,
            ISRECORD,
            MasterMebID,
            Flag
        )
        SELECT
            A.CONFROOM,
            A.SeqNo,
            A.CONFTITLE,
            A.BOOKTIME,
            A.IsRecord,
            A.MasterMebID,
            20                --取消的预约会议
        FROM dbo.WTC_TB_BOOKCONF A WITH(NOLOCK)
        WHERE A.CONFROOM = @ConfRoom
            AND NOT EXISTS
            (
                SELECT 1
                FROM dbo.WTC_TB_USERCONF B WITH(NOLOCK)
                WHERE B.CONFROOM = A.CONFROOM
            )  
    
        INSERT INTO dbo.WTC_TB_USERCONFMEB
        (
            MebID,
            CONFROOM,
            PHONENO,
            PHONENOTE,
            MEMBERTYPE,
            ADDCONFTIME,
            ADDORDER
        )
        SELECT
            A.MebID,
            A.CONFROOM,
            A.PHONENO,
            A.PHONENOTE,
            A.MEMBERTYPE,
            GETDATE(),
            ROW_NUMBER() OVER(ORDER BY GETDATE())  
        FROM dbo.WTC_TB_BOOKMEMBER A WITH(NOLOCK)
        WHERE CONFROOM = @ConfRoom
            AND NOT EXISTS
            (
                SELECT 1
                FROM dbo.WTC_TB_USERCONFMEB B WITH(NOLOCK)
                WHERE B.CONFROOM = A.CONFROOM
                    AND B.MebID = A.MebID
            )  
    
        --保留预约会议信息,以便统计短信等费用
        INSERT INTO dbo.WTC_TB_CONFROOM
        (
            CONFROOM,
            SeqNo,
            CONFID,
            CREATETIME,
            CREATEONLINEID,
            CONFTITLE,
            UPDATETIME,
            IsPlayMusic,
            CONFTYPE,
            CONFDATAKEY,
            RECORDTHREADID,
            IsRecord
        )
        SELECT
            A.CONFROOM,
            A.SeqNo,
            0,
            A.BOOKTIME,
            A.MasterMebID,
            A.CONFTITLE,
            GETDATE(),
            0,
            0,
            '',
            0,
            A.IsRecord
        FROM dbo.WTC_TB_BOOKCONF A WITH(NOLOCK)
        WHERE A.CONFROOM = @ConfRoom
            AND NOT EXISTS
            (
                SELECT 1
                FROM dbo.WTC_TB_CONFROOM B WITH(NOLOCK)
                WHERE B.CONFROOM = A.CONFROOM
            ) 
    
        INSERT INTO dbo.WTC_TB_CONFMEMBERS
        (
            MebID,
            CONFROOM,
            PHONENO,
            DATA,
            UPDATETIME,
            ADDORDER
        )
        SELECT
            A.MebID,
            A.CONFROOM,
            A.PHONENO,
            A.PHONENOTE,
            GETDATE(),
            ROW_NUMBER() OVER(ORDER BY GETDATE()) 
        FROM dbo.WTC_TB_BOOKMEMBER A WITH(NOLOCK)
        WHERE CONFROOM = @ConfRoom
            AND NOT EXISTS
            (
                SELECT 1
                FROM dbo.WTC_TB_CONFMEMBERS B WITH(NOLOCK)
                WHERE B.CONFROOM = A.CONFROOM
                    AND B.MebID = A.MebID
            ) 
    
        COMMIT TRAN
    END TRY
    BEGIN CATCH
        ROLLBACK TRAN
        RETURN -100        --数据库异常
    END CATCH
    
    
    GO
    View Code


    获取预约会议

    /****** Object: Procedure [dbo].[UP_ConfScheduled_GetScheduledConfs]   Script Date: 2014-3-17 9:29:19 ******/
    USE [ytSummitTeleConf_DB];
    GO
    SET ANSI_NULLS ON;
    GO
    SET QUOTED_IDENTIFIER ON;
    GO
    /*=============================================================
    
    =============================================================*/
    CREATE PROCEDURE [dbo].[UP_ConfScheduled_GetScheduledConfs]
        @SeqNo INT  
    AS
    SET NOCOUNT ON
    
    SELECT
        A.CONFROOM
        ,A.CONFTITLE
        ,A.BOOKTIME
      ,A.WRITETIME
        ,B.MemberCount
        ,A.IsRecord
    FROM dbo.WTC_TB_BOOKCONF A WITH(NOLOCK)
        OUTER APPLY
        (
            SELECT MemberCount = COUNT(1)
            FROM dbo.WTC_TB_BOOKMEMBER B WITH(NOLOCK)
            WHERE B.CONFROOM = A.CONFROOM
        ) B
    WHERE A.SeqNo = @SeqNo
        AND A.[STATUS] = 0
    ORDER BY A.BOOKTIME desc
    GO
    View Code


    修改参会模式

    /****** Object: Procedure [dbo].[UP_ConfScheduled_SetParticipantTalkMode]   Script Date: 2014-3-17 9:32:26 ******/
    USE [ytSummitTeleConf_DB];
    GO
    SET ANSI_NULLS ON;
    GO
    SET QUOTED_IDENTIFIER ON;
    GO
    
    /*=============================================================
    
    =============================================================*/
    CREATE PROCEDURE dbo.UP_ConfScheduled_SetParticipantTalkMode
        @ConfRoom UNIQUEIDENTIFIER,
        @MemberList XML
    AS
    SET NOCOUNT ON
    /*
    <Root>
        <Member>
            <MebID>5685C2C9-70B7-4721-AB77-385FEDD7B0CF</MebID>
            <MemberType>1</MemberType>
        </Member>
        <Member>
            <MebID>E495548E-55FA-4588-AB9A-99CC7ED3D758</MebID>
            <MemberType>4</MemberType>
        </Member>
    </Root>
    */
    UPDATE A
    SET A.MemberType = B.MemberType
    FROM dbo.WTC_TB_BOOKMEMBER A
        INNER JOIN
        (
            SELECT 
                MebID = T.c.value('(./MebID/text())[1]', 'UNIQUEIDENTIFIER'),
                MemberType = T.c.value('(./MemberType/text())[1]', 'TINYINT')
            FROM @MemberList.nodes('Root/Member') AS T(c)
        ) B
            ON A.MebID = B.MebID
    WHERE A.CONFROOM = @ConfRoom
    
    GO
    View Code
  • 相关阅读:
    1. 二分查找
    Filezilla使用
    正则表达式regex
    TCP的三次握手和四次挥手
    Pycharm 更换源
    寒假学习进度(十四)
    寒假学习进度(十)
    寒假学习进度(九)
    寒假学习进度(八)
    寒假学习进度(七)
  • 原文地址:https://www.cnblogs.com/callbin/p/3604458.html
Copyright © 2011-2022 走看看