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
  • 相关阅读:
    JDBC 复习4 批量执行SQL
    JDBC 复习3 存取Oracle大数据 clob blob
    Oracle复习
    Linux命令(1)grep
    JDBC 复习2 存取mysql 大数据
    JDBC 复习1 DBUtil
    php 环境搭建问题
    Windows 批处理 bat 开启 WiFi 菜单选项 设置ID PWD
    Bat 批处理启动和停止Oracle 服务
    docker 学习1 WSL docker ,Windows docker
  • 原文地址:https://www.cnblogs.com/callbin/p/3604458.html
Copyright © 2011-2022 走看看