zoukankan      html  css  js  c++  java
  • EF中存储过程的使用

     

    存储过程即用来完成一个特定功能的一段代码。它的优缺点

    优点

    • 存储过程可封装,并隐藏复杂的商业逻辑。
    • 存储过程可以回传值,并可以接受参数。
    • 存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
    • 存储过程可以用在数据检验,强制实行商业逻辑等。

    缺点

    • 存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
    • 存储过程的性能调校与撰写,受限于各种数据库系统。

    1.常用存储过程的格式如下

    create procedure sp_name
    @[参数名] [类型],@[参数名] [类型]
    as
    begin
    .........
    end
    以上格式还可以简写成:
    create proc sp_name
    @[参数名] [类型],@[参数名] [类型]
    as
    begin
    .........
    end
    /*注:“sp_name”为需要创建的存储过程的名字,该名字不可以以阿拉伯数字开头*/
    调用存储过程
     
    存储过程可以在三种环境下被调用:
    command命令下,基本语法为:exec sp_name [参数名];
     
    SQL环境下,基本语法为:call sp_name [参数名];
     
    PL/SQL环境下,基本语法为:begin sp_name [参数名] end;
     
    删除存储过程
     
    1.基本语法:
    drop procedure sp_name
     
    实际存储过程调用示例:
    USE  DataBase  --数据库名
    GO
    /****** Object:  StoredProcedure [dbo].[dbSixMonthConversion]    Script Date:  2019/8/30 14:47:10 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:           <Author,,Name>
    -- Create date: <Create Date,,>
    -- Description:      <Description,,>
    -- =============================================
    ALTER PROCEDURE [dbo].[dbProcdureName] -- 存储过程名称
        @currentDate DATETIME
           -- Add the parameters for the stored procedure here
    AS
        BEGIN
            CREATE TABLE #TempTable --创建临时表缓存数据
                (
                  MonthCount INT ,
                  YearCount INT ,
                  AnyValue INT
                );
            DECLARE @i INT;   --循环插入数据
            SET @i = 0;
            WHILE @i < 6
                BEGIN
                          DECLARE @date DATETIME = DATEADD(MONTH, -@i, @currentDate);
                    INSERT  INTO #TempTable
                            ( MonthCount ,
                              YearCount ,
                              AnyValue
                            )
                       VALUES  ( YEAR(@date) , -- MonthCount - int
                              MONTH(@date) , -- YearCount - int
                              ( SELECT  COUNT(1)
                                FROM    atjubodb.dbo._User
                                WHERE   ID NOT IN (
                                        SELECT DISTINCT
                                                UserID
                                        FROM    atjubodb.dbo._Order
                                        WHERE   CreateTime IS NOT NULL
                                                AND State IS NOT NULL
                                                AND  State > 0
                                                AND CreateTime <= @date )--'2019/8/1  0:00:00'
                                        AND ID IN (
                                        SELECT DISTINCT
                                                UserID
                                        FROM    atjubodb.dbo._Order
                                        WHERE   CreateTime IS NOT NULL
                                                AND State IS NOT NULL
                                                AND State > 0
                                                AND YEAR(CreateTime) = YEAR(@date)
                                                AND MONTH(CreateTime) = MONTH(@date) )
                              )
                            );   -- AnalyticalValue - int
                    SET @i = @i + 1;
                END;
                     
            SELECT  *
            FROM    #TempTable;
            DROP TABLE #TempTable;
            RETURN 1;
        -- Insert statements for procedure here
        END;
     

    2.EF中存储过程的调用,带输出参数

       
    DateTime currentDate = new DateTime(DateTime.Now.Year,  DateTime.Now.Month, 1);
       //输出参数
       SqlParameter paramOut = new  SqlParameter("return_value", 0);
       paramOut.Direction = ParameterDirection.Output;
                      
       //输入参数
       SqlParameter paramIn = new  SqlParameter("currentDate", currentDate);
       var querys =  dbContext.Database.SqlQuery<AppSixMonethStatisics>("EXEC  [dbo].[dbProcdureName]  @currentDate,@return_value output", new object[] {  paramOut,paramIn }).ToList();
     

    3.Sql中简单循环的使用

    SET @i = 0;
            WHILE @i < 6
                BEGIN
    END;
     
  • 相关阅读:
    PTA —— 基础编程题目集 —— 函数题 —— 61 简单输出整数 (10 分)
    PTA —— 基础编程题目集 —— 函数题 —— 61 简单输出整数 (10 分)
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    迷宫问题 POJ 3984
    UVA 820 Internet Bandwidth (因特网带宽)(最大流)
    UVA 1001 Say Cheese(奶酪里的老鼠)(flod)
    UVA 11105 Semiprime Hnumbers(H半素数)
    UVA 557 Burger(汉堡)(dp+概率)
  • 原文地址:https://www.cnblogs.com/jerque/p/11436456.html
Copyright © 2011-2022 走看看