存储过程

SQL的IF语句

安稳与你 提交于 2020-02-21 01:43:19
MySQL的IF既可以作为表达式用,也可在存储过程中作为流程控制语句使用,如下是做为表达式使用: IF表达式 IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。 SELECT IF(sva=1,"男","女") AS s FROM table_name WHERE sva != ''; 作为表达式的if也可以用CASE WHEN来实现: SELECT CASE sva WHEN 1 THEN '男'   ELSE '女' END AS s FROM table_name WHERE sva != ''; 在第一个方案的返回结果中, value=compare-value。而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。 例如: SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END AS test 将输出one IFNULL(expr1,expr2) 假如expr1 不为 NULL,则 IFNULL()

【转】SQL Server 中的临时表

ぃ、小莉子 提交于 2020-02-20 19:02:13
最经工作中经常要用到的 SQL query (in SQL server), 发现这个临时表在处理数据时比较方便, 优点如下: 那么什么是SQL server中的临时表,什么时候需要用到临时表?又该如何使用呢? SQL Server 中的临时表分类: 本地临时表 仅限于当前访问者访问,创建方法去如下: create table #TableName(表结构) 储存于数据库tempdb内(硬盘),当前用户断开连接,自动删除 如果使用中不断开连接,且不需要该临时表请执行:drop table #TableName 全局临时表 所有访问用户访问,创建方法去如下: create table ##TableName(表结构) 储存于数据库tempdb内,当所有访问用户断开连接,自动删除 删除语句:drop table ##TableName 2. 什么时候需要用到临时表呢? 假设一个表里面的数据有非常非常多,需要频繁的查询这个表里的相似数据 可以把相似数据放入一个临时表 3. 如何创建临时表 创建临时表 方法一: create table #临时表名(字段1 约束条件, 字段2 约束条件, .....) create table ##临时表名(字段1 约束条件, 字段2 约束条件, .....) 方法二: select * into #临时表名 from 你的表; select * into

oracle 存储过程的基本语法

Deadly 提交于 2020-02-20 10:17:38
oracle 存储过程的基本语法 1.基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) IS 变量1 INTEGER :=0; 变量2 DATE; BEGIN END 存储过程名字 2.SELECT INTO STATEMENT 将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条 记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND) 例子: BEGIN SELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx; EXCEPTION WHEN NO_DATA_FOUND THEN xxxx; END; ... 3.IF 判断 IF V_TEST=1 THEN BEGIN do something END; END IF; 4.while 循环 WHILE V_TEST=1 LOOP BEGIN XXXX END; END LOOP; 5.变量赋值 V_TEST := 123; 6.用for in 使用cursor ... IS CURSOR cur IS SELECT * FROM xxx; BEGIN FOR cur_result in cur LOOP BEGIN V_SUM :=cur

几种常见SQL分页存储过程方式效率比较

时光毁灭记忆、已成空白 提交于 2020-02-20 01:07:17
1.创建测试环境,(插入100万条数据大概耗时5分钟)。 create database DBTestuse DBTest--创建测试表create table pagetest(id int identity(1,1) not null,col01 int null,col02 nvarchar(50) null,col03 datetime null)--1万记录集declare @i intset @i=0while(@i<10000)begin insert into pagetest select cast(floor(rand()*10000) as int),left(newid(),10),getdate() set @i=@i+1end 复制代码 2.几种典型的分页sql,下面例子是每页50条,198*50=9900,取第199页数据。 --写法1,not in/topselect top 50 * from pagetest where id not in (select top 9900 id from pagetest order by id)order by id--写法2,not existsselect top 50 * from pagetest where not exists (select 1 from (select top 9900 id

存储过程中对游标赋值

自闭症网瘾萝莉.ら 提交于 2020-02-20 01:02:30
declare mycursor cursor for -- ----------定义游标 select cloum1,cloum2 from table open mycursor -- ---------------打开游标 declare @message varchar ( 100 ), @user_id varchar ( 100 ), @cityid varchar ( 100 ) FETCH NEXT FROM mycursor INTO @user_id , @cityid WHILE @@FETCH_STATUS = 0 BEGIN SELECT @message = ' user: ' + @user_id + ' bbbbb ' + @cityid PRINT @message FETCH NEXT FROM mycursor INTO @user_id1 , @cityid end close mycursor -- ----------------关闭游标 deallocate mycursor -- ----------释放游标 go 来源: https://www.cnblogs.com/leves/archive/2005/08/12/213232.html

在存储过程中使用游标

↘锁芯ラ 提交于 2020-02-20 00:55:48
游标的使用,相当方便,下面贴一个例子: Code 1 set ANSI_NULLS ON 2 set QUOTED_IDENTIFIER ON 3 GO 4 ALTER PROCEDURE [ dbo ] . [ GetProductPriceFromYear ] 5 @ProductID int , 6 @Date Datetime 7 AS 8 BEGIN 9 create table #temp1 10 ( 11 id int IDENTITY ( 1 , 1 ) NOT NULL primary key , 12 AddDate varchar ( 20 ), 13 [ datename ] varchar ( 20 ), 14 week varchar ( 20 ), 15 ProductName varchar ( 20 ), 16 ProductID varchar ( 20 ), 17 LPrice float ( 20 ), 18 HPrice float ( 20 ), 19 APrice float ( 20 ), 20 WeekLPrice float ( 20 ), 21 WeekHPrice float ( 20 ), 22 WeekAPrice float ( 20 ), 23 WeekDayCount int 24 ) 25 26 declare

存储过程游标及WHILE语句

不想你离开。 提交于 2020-02-20 00:53:30
Declare Write_Cursor Cursor For Select a.AuditingID, a.BillType, a.AuditingDescription, a.AuditingStep, a.EtypeID, b.FullName, a.AuditingAlerm From AuditingFlowDetail a,Employee b Where a.AuditingID = @nAuditingID And a.AuditingStep = @CurStep And a.EtypeID = b.TypeID AND outKty=@IfOut Open Write_Cursor Fetch Next From Write_Cursor Into @AuditingID, @BillType, @AudDesc, @AuditingStep, @ETypeID, @EName, @AuditingAlerm IF @IfOut='i' AND @OutLever<>1 BEGIN Insert #AudDetail ([AudID],[BillType],[Desc],[Step],[EtypeID],[Name],[AuditingAlerm]) Values (@AuditingID, @BillType, @AudDesc, @AuditingStep-

Oracle数据库过程、函数、包、触发器

柔情痞子 提交于 2020-02-19 15:05:06
过程: call procedures_name(p1,p2,...);-- 调用存储过程 select * from user_procedures;-- 获取有关存储过程信息 Show errors for procedure procedure_name;-- 查看存储过程中的错误 函数: select function_name(p1,p2...) from dual;-- 调用 select * from user_procedures;-- 查询函数,按照object_type区分过程,函数,... 包: select 包名.过程/函数 from dual;或者call 包名.过程/函数;-- 调用包中的函数或者过程 select * from user_procedures;-- 查询包信息 触发器: alter trigger trigger_name disable;-- 禁用触发器 select * from user_triggers;-- 读取触发器信息 来源: https://www.cnblogs.com/suhfj-825/p/12331234.html

C# 调用存储过程有参有返回值的获取做法详解

你。 提交于 2020-02-19 02:30:39
C# 获取Mysql存储过程out输出参数返回值的问题 时隔几个月没更新CSDN了,回头再看之前的写法总结发现好垃圾!现在我更新最近解决的一个问题 写超市收银系统的时候需要写一些数据处理算法所以用到了这个返回值!请看代码! 1.创建MysqlConnection连接对象 开启连接 2.创建MysqlCommand执行对象 预备执行 3.设置第一个参数是什么字符串 存储过程还是sql文本命令 4.开始设置输入参数 5.输入参数设置完 输出参数也要设 虽然没有值 但是可以给他规定一个输出的属性 6.调用ExecuteNonQuery或者ExecuteNonQueryAsync方法开始执行 7.value和tostring方法获取数值放入变量进行操作 以上的每一个步骤必须一个不少 以上就是我最近总结的一个有关Mysql存储过程获取返回值的例子 有任何问题都可以联系QQ2773938492 在线帮你解决问题 免费 来源: CSDN 作者: 欢少の不忘初心 链接: https://blog.csdn.net/weixin_44907128/article/details/104373510

SQLServer 存储过程调优小结

你说的曾经没有我的故事 提交于 2020-02-19 01:55:42
公司服务器崩了,很多测试环境用不了,弄了一个生产库还原到本地,调了下统计分析系统的一些存储过程: 场景:首页一进去就加载七个报表,而且是实时计算的。。。不光耗资源,还会锁住ajax,串行一个个执行这七个存储过程,导致其它的ajax执行不了(表现在点击其它子菜单无响应,要等前面ajax用完了才会轮到后面) 1、固化数据、缓存什么的,先不考虑,还是按原样先动态实时取首页吧,接手过来的项目先不急着翻新,先看能否花半天一天优化。 2、按前几天学的在控制器上设置Session的ReadOnly,刷新首页发现死锁。。。而且是每次必死锁 3、检查存储过程,发现里面都有两句UPDATE全库的一个字段,如果是NULL则取另一个值。这个没必要每次查询都去全库更新,会锁表,也不可能存在这么多异常数据,这种数据修正的,放在每晚同步时处理就好了,去掉后不再死锁。 4、并行后,速度反正不如原先串行的。。。串行的每个执行只要1~3秒(虽然也不短),但整体下来还好,一个个等它轮圈,二十秒左右也全部加载完了。但并行后,每个都要花掉10~20秒左右。。。翻了好几倍 5、复制出来执行,一个个又恢复到1~3秒,怀疑是并发引起,又不好重现并发场景,就把SQL窗口缩小,屏幕上并排摆了7个,一个个快速切换到窗口用快捷键执行,这样也重现出了速度慢的情况。 6、观察存储过程,有两张大表(几十万),没加索引。加完索引后,效果不明显。