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, );
//输出参数
SqlParameter paramOut = new SqlParameter("return_value", );
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;
EF中存储过程的使用的更多相关文章
- EF中使用SQL语句或存储过程
EF中使用SQL语句或存储过程 1.无参数查询var model = db.Database.SqlQuery<UserInfo>("select* from UserInfoe ...
- EF中使用语句 或存储过程 查询(转)
EF中使用语句 或存储过程 查询 1.无参数查询 var model = db.Database.SqlQuery("select* from UserInfoes ").ToLi ...
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
easyui datagrid 禁止选中行 没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...
- EF中使用SQL语句或存储过程(小笔记)
1.无参数查询 var model = db.Database.SqlQuery<UserInfo>("select* from UserInfoes ").ToLis ...
- EF中执行sql语句,以及事务
EF to sql string sql = "select T_Task.BSID,T_Task.CloseDate,T_Task.CompleteDate,T_Task.CloseUse ...
- ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK
看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, 加入一个表10W数据,另一个表也是10万数据,当你用linq建立一个连接查询 ...
- 转:EF调用存储过程、函数
EF调用存储过程.函数 2014-04-02 09:12:20| 分类: ORM框架|举报|字号 订阅 一.ef4.1 codeFirst 修改表结构 增加字段等 EF code ...
- EF中执行原生sql与使用Local获取本地数据
使用DbSet的Local属性可以访问当前context中被追踪且没有被标记为删除的实体(内存中的数据) using (var context = new BloggingContext()) { / ...
- ASP.NET MVC + EF 利用存储过程读取大数据
ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK 看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, ...
随机推荐
- sql语句字符串包含
select instr('1222','122') from dual//前者包含后者>0 oracle mysql 数据库可中 select charindex('1','12') from ...
- [译]C# 7系列,Part 2: Async Main 异步Main方法
原文:https://blogs.msdn.microsoft.com/mazhou/2017/05/30/c-7-series-part-2-async-main/ 你大概知道,C#语言可以构建两种 ...
- JQuery 基本使用、操作样式、简单动画
JQ与JS JQ是JS写的插件库,就是一个JS文件 凡是用JQ能实现的,JS都能实现,JS能实现的,JQ不一定能实现 引入 BootCDN:https://www.bootcdn.cn/jquery/ ...
- 扫描枪连接zebra打印机打印条码标签无需电脑
在一些流水线生产的现场,需要及时打印条码标签,由于现场环境和空间限制,无法摆放电脑或者通过连接电脑来打印条码标签的速度太慢, 瑞科条码特提供了一套扫描枪直接连接条码打印机,扫描枪扫描条码之后直接打印输 ...
- 解决Android killer APK 编译失败,无法继续下一步签名
报错特征 在应用市场上下载了一个APK,使用Androd killer的编译的功能,结果报错了,报错信息如下: > ... 14 more APK 编译失败,无法继续下一步签名! 解决 解决 ...
- 用百度大脑技术让AI做回新闻主播!
实现效果: 利用百度新闻摘要能力和微信小程序,快速抽取新闻摘要内容并进行语音播报,让AI做回新闻主播!本文主要介绍小程序功能开发实现过程,分享主要功能实现的子程序模块,都是干货哦!! 想了解pytho ...
- DG中switchover切换操作
问题描述:我们配置DG的目的就是为了在主库出现故障时,备库能够提供服务,保证业务的正常运行,switchover是用户有计划的进行停机切换,能够保证不丢失数据,我记录一下我进行switchover中的 ...
- linux 定时备份数据库
说明 检查Crontab是否安装 若没有 需要先安装Crontab定时工具 安装定时工具参考(https://www.cnblogs.com/shaohuixia/p/5577738.html) 需要 ...
- PKUWC 2020 游记
由于 CSP 的暴力分太高,我来了这里. 我将告诉大家,我在暴力分不高时是个怎样的 sb 选手. Day -17 又停课啦. 旁边坐着 pb,每天刷题特别猛,然后就凸显了我有多颓. 怎么想打开个猫国都 ...
- UWP 在ShellPage.xaml.cs 中导航至其他页面引发System.Exception
最近有一个需求,需要App监测网络变化,并在网络变化的同时用户,你切网啦,并且导航至一个切网的特定页面. 和Android.iOS的小伙伴后共同发现,人家有一个类似”拦截器“的框架,可以拦截App发出 ...