• SQL Server经验


    一.SQL Server 经验

    1.一个简单的存储过程

    CREATE PROCEDURE [dbo].[usp_GetFolderID](@itemID INT,  
              @folderID INT OUTPUT)  
    AS
    BEGIN TRY 
    
         SELECT @folderID = FOLDERID
         FROM TestItemVer
         WHERE ITEM_ID = @itemID  
          
         IF @folderID IS NULL  
          SET @folderID = 0   
          
         RETURN @folderID  
    END TRY
    BEGIN CATCH
        EXEC usp_ErrorHandle;
    END CATCH
    View Code

    2. 存储过程经验
      1)参数

    CREATE PROCEDURE [dbo].[usp_Proc]
    (
        @TargetTypeID    int,
        @DataKey        int,    
        @TlmIP            NVARCHAR(200) = null,
        @TlmPort        NVARCHAR(100) = null,
        @TauID            int = null,
        @ExtInfo        NVARCHAR(max) = null
    )
    View Code

      2)定义变量,表变量

                    DECLARE @BaseJobId INT;
            DECLARE @Level INT;
            DECLARE @TasksTable TABLE
            (
                JOB_ID                INT,
                [ORDER]                INT,
                TP_ID                INT,
                ASSIGNED_USERID        NVARCHAR(100),
                TLM_ID                INT,
                EXE_TAU_ID            INT,
                BASE_JOB_ID            INT,
                PARENT_JOB_ID        INT,
                [LEVEL]                INT
            );        
    View Code

      3)分层查询(有自关联关系)

    WITH lmenu(JOB_ID,[ORDER],TP_ID,ASSIGNED_USERID,TLM_ID,
                EXE_TAU_ID,BASE_JOB_ID,PARENT_JOB_ID,LEVEL) AS  
            (     
                SELECT JOB_ID,[ORDER],TP_ID,ASSIGNED_USERID,TLM_ID,
                EXE_TAU_ID,BASE_JOB_ID,PARENT_JOB_ID,0 LEVEL 
                FROM TestJob 
                WHERE JOB_ID = @DataKey
                UNION ALL     
                SELECT A.JOB_ID,A.[ORDER],A.TP_ID,A.ASSIGNED_USERID,A.TLM_ID,
                A.EXE_TAU_ID,A.BASE_JOB_ID,A.PARENT_JOB_ID,b.LEVEL+1 FROM TestJob A,lmenu B      
                where A.JOB_ID = B.PARENT_JOB_ID 
            )
            INSERT @TasksTable
            SELECT * FROM lmenu
    View Code

      4)向表变量插入数据

                    DECLARE @jobVTL TABLE(
                JOB_ID INT NOT NULL
                ,[ORDER] INT NOT NULL
            );
            INSERT @jobVTL 
                SELECT JB.JOB_ID,[ORDER]
                FROM @TasksTable JB 
            INNER JOIN dbo.TestPlan TP WITH(NOLOCK)
                ON JB.TP_ID = TP.TP_ID
            INNER JOIN dbo.User_Info UI WITH(NOLOCK)
                ON JB.ASSIGNED_USERID = UI.USER_ID
            LEFT OUTER JOIN dbo.TLM TLM WITH(NOLOCK)
                ON JB.TLM_ID = TLM.TLM_ID
            LEFT OUTER JOIN dbo.TAU TAU WITH(NOLOCK)
                ON JB.EXE_TAU_ID = TAU.TAU_ID        
    View Code

      5)统计并排序

                            --Count by order and result                
                DECLARE @tcTestResultCount TABLE(
                     [ORDER] INT NOT NULL
                    ,PASS INT NOT NULL 
                    ,FAIL INT NOT NULL 
                    ,[N/A] INT NOT NULL 
                    ,[N/E] INT NOT NULL 
                );        
                INSERT @tcTestResultCount
                SELECT VTL.[ORDER], ISNULL([PASS],0) [PASS],
                        ISNULL([FAIL],0)[FAIL],
                        ISNULL([N/A],0)[N/A],
                        ISNULL([N/E],0)[N/E]
                FROM @jobVTL VTL
                LEFT JOIN 
                (
                SELECT [ORDER], [PASS],[FAIL],[N/A],[N/E] FROM
                @tcTestResult TCR
                pivot(COUNT(TEST_RESULT) FOR TEST_RESULT IN([Pass],[Fail],[N/A],[N/E])
                ) TB 
                ) TCR
                ON VTL.[ORDER] = TCR.[ORDER]
                ORDER BY VTL.[ORDER]    
    View Code

      6)计算百分比

    DECLARE @tcTestResultTotal TABLE(
                     [ORDER] NVARCHAR(10) NOT NULL
                     ,[COUNT] INT 
                    ,PASS INT 
                    ,FAIL INT 
                    ,[N/A] INT 
                    ,[N/E] INT 
                    ,PASS_RATE NVARCHAR(10) 
                );    
                
                INSERT @tcTestResultTotal
                SELECT TR.[ORDER], [COUNT],[PASS],[FAIL],[N/A],[N/E],
                CASE WHEN [COUNT] > 0 THEN CONVERT(varchar(20),CAST(([PASS]+0.0)*100/[COUNT] AS DECIMAL(10, 2)))+'%'
                            ELSE '0.00%'
                            END [PASS_RATE]
                FROM @tcTROrderCount TR
                INNER JOIN @tcTestResultCount TRC
                ON TR.[ORDER] = TRC.[ORDER]
                
                SELECT * FROM @tcTestResultTotal
    View Code

      7)查询第一条数据

        SELECT TOP 1 ID FROM TESTJOB

      8)执行存储过程

        EXEC [dbo].[usp_GetObjects] 7, 21838;

    2.函数

      1)创建函数 

    CREATE FUNCTION [dbo].[usp_GetDBNull]
    (
        @inputString varchar(8000)
    )
    RETURNS varchar(8000)
    AS
    BEGIN
        DECLARE @outputString varchar(8000);
        SET @outputString = NULL;
        
        IF @inputString <> '' SET @outputString = @inputString;
        
        RETURN @outputString;
    END
    View Code

      2)执行函数

       SELECT [dbo].[usp_GetDBNull]('');
         SELECT [dbo].[usp_GetDBNull]('ABC');

       3)使用函数

    SELECT    TP_NAME ItemName,
                    SCHEDULED_START_DATE,
                    SCHEDULED_END_DATE,
                    SCHEDULED_RELEASE_DATE,
                    dbo.ufn_GetTestItemCountByTestPlan(TP.TP_ID, 'RQ') AS TOTAL_RQ,
                    dbo.ufn_GetTestItemCountByTestPlan(TP.TP_ID, 'TC') AS TOTAL_TC,
                    PURPOSE,
                    SCOPE,
                    ENVIRONMENT,
                    [DESCRIPTION],
                    @MailTitle MAIL_TITLE,
                    @APP_ID APP_ID,
                    @APP_ORDER APP_ORDER
            FROM    dbo.TestPlan TP
            WHERE    TP.TP_ID = @DataKey;
    View Code
  • 相关阅读:
    用导数解决逗逼初三数学二次函数图像题
    NOIP 2014 pj & tg
    BZOJ 1004
    双参数Bellman-ford带队列优化类似于背包问题的递推
    emu1
    無題
    15 day 1代碼
    javascript quine
    线段树的总结
    Watering the Fields(irrigation)
  • 原文地址:https://www.cnblogs.com/wxlovewx/p/5216960.html
Copyright © 2020-2023  润新知