当前位置:首页 » 存储配置 » sql存储

sql存储

发布时间: 2022-01-29 04:46:26

A. sql存储过程

可以修改为:在if exists判断之后
select RaceNumbers into #rid from Matchinformation
where RaceNumbers in (select RaceNumbers from inserted)
group by RaceNumbers having count(RaceNumbers)=2

update Team set Integration=(case when a.PGoals-b.PGoals >0 then 3
when a.PGoals-b.PGoals=0 then 1 else 0 end)
from Matchinformation a left join MatchInformation b on a.RaceNumbers =b.RaceNumbers
and a.TeamId<>b.TeamId
where Team.TeamId=a.TeamId and a.RaceNumbers in(select * from #rid)

B. SQL 中存储过程怎么使用

一、简单的储存过程:

1、创建一个存储过程

create procere GetUsers()

begin

select * from user;

end;12345

2、调用存储过程

call GetUsers();12

3、删除存储过程

drop procere if exists GetUsers;

二、带参数的存储过程

1、MySql 支持 IN (传递给存储过程) , OUT (从存储过程传出) 和 INOUT (对存储过程传入和传出) 类型的参数 , 存储过程的代码位于 BEGIN 和 END 语句内 , 它们是一系列 SQL 语句 , 用来检索值 , 然后保存到相应的变量 (通过指定INTO关键字) ;

2、下面的存储过程接受三个参数 , 分别用于获取用户表的最小 , 平均 , 最大分数 , 每个参数必须具有指定的类型 , 这里使用十进制值(decimal(8,2)) , 关键字 OUT 指出相应的参数用来从存储过程传出

create procere GetScores(

out minScore decimal(8,2),

out avgScore decimal(8,2),

out maxScore decimal(8,2)

)

begin

select min(score) into minScore from user;

select avg(score) into avgScore from user;

select max(score) into maxScore from user;

end;1234567891011

3、调用此存储过程 , 必须指定3个变量名(所有 MySql 变量都必须以@开始) , 如下所示 :

call GetScores(@minScore, @avgScore, @maxScore);12

4、该调用并没有任何输出 , 只是把调用的结果赋给了调用时传入的变量@minScore, @avgScore, @maxScore, 然后即可调用显示该变量的值 :

select @minScore, @avgScore, @maxScore;

5、使用 IN 参数 , 输入一个用户 id , 返回该用户的名字 :

create procere GetNameByID(

in userID int,

out userName varchar(200)

)

begin

select name from user

where id = userID

into userName;

end;12345678910

6、调用存储过程 :

call GetNameByID(1, @userName);

select @userName;123

C. sql存储过程是什么

所有设计优良的 Microsoft® SQL Server™ 2000 应用程序都应当使用存储过程。不论是否将应用程序的业务逻辑写入存储过程都应如此。甚至连没有业务逻辑组件的标准 Transact-SQL 语句,在用参数打包成存储过程后也能获得性能收益。编译进存储过程的 Transact-SQL 语句在执行时可省去大量的处理。
存储过程的另一个优点是客户端执行请求使用网络的效率比将等效的 Transact-SQL 语句发送到服务器高。例如,假设应用程序需要将一个大的二进制值插入 image 数据列。为使用 INSERT 语句发送数据,该应用程序必须将该二进制值转换为字符串(其大小翻倍),然后发送到服务器。服务器再将该值转换回二进制格式以存储在 image 列中。
相反,应用程序可以创建下列格式的存储过程:
CREATE PROCEDURE P(@p1 image) AS INSERT T VALUES (@p1)
当客户端应用程序请求执行过程 P 时,image 参数值将一直以二进制格式发送到服务器,从而节省处理时间并减少网络流量。
如果 SQL Server 存储过程中包含业务服务逻辑,因为业务服务逻辑将处理移动到数据,而不是将数据移动到处理,因而存储过程能提供更大的性能收益。
存储过程的优点
(1)存储过程的能力大大增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的 运算。
(2) 可保证数据的安全性和完整性。
● 通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。
● 通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。
(3) 再运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。 由于执行SQL语句的大部分工作已经完成,所以存储过程能以极快的速度执行。
(4)可以降低网络的通信量。
(5) 使体现企业规则的运算程序放入数据库服务器中,以便:
● 集中控制。
● 当企业规则发生变化时在服务器中改变存储过程即可,无须修改任何应用程序。企业规则的特点是要经常变化,如果把体现企业规则的运算程序放入应用程序中,则当企业规则发生变化时,就需要修改应用程序工作量非常之大(修改、发行和安装应用程序)。如果把体现企业规则的 运算放入存储过程中,则当企业规则发生变化时,只要修改存储过程就可以了,应用程序无须任何变化。

1.使用企业管理器创建用户存储过程
操作步骤如下:
(1)启动SQL Server企业管理器。
(2)在“控制台根目录”窗口,展开“SQL Server组”,首先,选择“数据库”,然后,选择“存储过程”,单击鼠标右键,打开快捷菜单。
(3)在打开快捷菜单中,选择“新建存储过程”菜单命令,进入“存储过程属性”窗口。
(4)在“存储过程属性”窗口,在文本框中输入存储过程代码,单击“确定”,结束存储过程的创建。
2.使用T-SQL语句创建用户存储过程
SQL命令格式:
CREATE PROC [ EDURE ] <Procere_name> [ ; Number ]
[ { @parameter Data_type }
[ VARYING ] [ = Default ] [ OUTPUT ]] [ ,...n ]
[ WITH{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION }]
[ FOR REPLICATION ]
AS sql_statements
功能:创建一个用户存储过程,并保存在数据库中。

D. SQL存储过程

CREATE PROCEDURE SP_Transfer
(
@StartDate DATETIME INPUT,
@EndDate DATETIME INPUT,
@Result int OUTPUT
)
AS
BEGIN
Select @Result = [字段名] From [表名]
WHERE indate_start = @StartDate AND
indate_end = @EndDate
END

Declare @RESULT INT;
EXEC SP_Transfer N'2009-06-30' N'2009-07-29' @RESULT

PRINT @RESULT

E. SQL存储过程怎么写

--表a和表b两个表之间要存在一种联系(比如你的会员ID,在这两个表里都有吧?)
--所以你可以这样写
--select case a.STS when Y then b.临时地址 else a.联系地址 end as Address
--from a join b on a.会员ID=b.会员ID
--这样就可以得到相应的地址了

F. sql存储过程用递归

表结构:
sale_area销售分区表
PK#area_id
class_id
gonghao
prod_class产品分类表
PK#class_id
class_name
问题sql语句:
select
distinct
pa.class_id
from
prod_class
As
pa,prod_class
As
pb,sale_area
where
pb.class_id
in(select
sale_area.class_id
from
sale_area
where
sale_area.gonghao=<param>)
and
pa.class_id
like
pb.class_id||'%'
问题定义:
根据传入的参数gonghao来确定对应的class_id集,然后遍历这个class_id集,并“扩充”这个集合
要理解“扩充”必须知道class_id是这样设等级:
0为最高级
|_01
|
|_011
|
|_012
|_02
|_011
|_012
那么拥有等级0的话,所有的等级都应该可以访问,拥有等级01的话,011、012也可以访问。
这句sql的目的就是得到当前员工能访问的所有产品分类及它的子集。
通过自连接的做法在Oracle里是对的,在DB2里就错,原因在于DB2中谓词like两边至少有一个是字符串,也就是说DB2不认为pb.class_id||'%'是字符串。
求解:
要完成上面的任务有什么可替代的办法或改进的地方,注意环境是DB2
UDB
7.2。
---------------------------------------------------------------
就是树的问题。
使用公共表达式可以完成。
你在信息中心里面按recusion去搜索,可以找到递归sql的写法。
---------------------------------------------------------------
问题写的很清楚,我喜欢!
如果要使用DB2的公共表达式建议你把
prod_class产品分类表结构改一下
PK#class_id
class_name
Parent_Class_id
sql语句如下:
with
temp_class_id(
class_id,class_name)
(
select
pc.class_id,pc.class_name
from
prod_class
pc
where
pc.class_id
in
(select
sale_area.class_id
from
sale_area
where
sale_area.gonghao=<param>)
union
select
pc.class_id,pc.class_name
from
prod_class
pc,
temp_class_id
tc
where
pc.parent_id
=
tc.class_id)
select
*
from
temp_class_id;

G. sql语句存储过程

可以先将多个商品ID拼成一个字符串("3,4,5")再传进去
create PROCEDURE pro_deleteProct
@Uid int ,
@Pids varchar(50)
AS
declare @sql varchar(200)
BEGIN
set @sql= 'delete from Procts where ProctId = '+ convert(varchar(20),@Uid) +' and ProctId in ('+@Pids+')'
--print @sql
exec (@sql)
END
GO

H. sql存储过程写法

select * from table where id = @id or @id is null

I. SQL存储问题

我们假设你的表叫 table
他的四个字段分别是 id, type, num, time

CREATE PROCEDURE temp
@id varchar(10),
@begindate datetime,
@enddate datetime

as

select id,
case when type='卖出' then num else null end,
case when type='买入' then num else null end
from table
where id=isnull(@id,id)
and time between isnull(@begindate,time) and isnull(@enddate,time)

J. SQL存储函数

create proc stu_proc2
@no varchar(50)
as
begin
select 学生,sum(成绩),sum(成绩)/count(1) from 表 group by 学生
end

热点内容
4岁编程猫 发布:2024-09-22 15:18:46 浏览:579
androidopencv教程 发布:2024-09-22 15:04:59 浏览:454
算法头脑 发布:2024-09-22 15:04:09 浏览:692
ftp错误无法获得远端文件夹信息 发布:2024-09-22 14:20:19 浏览:125
如何在安卓服看到白鸟 发布:2024-09-22 14:20:16 浏览:221
仿回车源码 发布:2024-09-22 14:01:14 浏览:518
mysql数据库索引原理 发布:2024-09-22 13:58:55 浏览:22
android照片旋转 发布:2024-09-22 13:53:39 浏览:443
编程大牛 发布:2024-09-22 13:49:08 浏览:720
为什么电脑弹出代理服务器错误 发布:2024-09-22 13:48:21 浏览:385