当前位置:首页 » 存储配置 » SQL的存储过程

SQL的存储过程

发布时间: 2022-02-21 11:20:32

Ⅰ 什么是sql存储过程

sql存储过程说简单点就是一个在t-sql下用户可以自行定义的函数,
但是与一般的函数也有不同的地方,比如它的返回值只能return(int类型),如果你要输出什么信息的话只能用output.这也是存储过程的一个特色吧,设定的参数可以有输出。讲起来有点抽象,给你个例子看看吧!
首先创建一个存储过程
create
procere
cunchuguocheng
@a
int,
@b
int,
@c
int
output
as
begin
select
@c
=
@a+@b
return(0)
end
然后调用这个存储过程
declare
@value
int,
--返回值
@c
int
--结果值
exec
@value
=
cunchuguocheng
2,2,@c
output
select
@value
as
返回值
select
@c
as
结果值
程序写的很简单,你运行一下我想你就会对存储过程有所了解了。

Ⅱ SQL存储过程是什么

就是在sql里面,可以执行的一段程序代码,就好比软件开发,就是一段代码,来处理一些事情,
sql的存储过程就是一段代码,来处理一些事情,可以被调用执行,也可以在定时器里面调用来定时处理

Ⅲ 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
功能:创建一个用户存储过程,并保存在数据库中。

Ⅳ 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

Ⅳ SQL的存储过程怎么用!~~

存储过程相当于Java,C#中的函数,就按照函数的用法理解就可以了。

Ⅵ 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

Ⅶ SQL存储过程!!!

你可以用output类型的参数。这里的输出是一个字符串,用“,”分割,你试试
IF
EXISTS
(
SELECT
*
FROM
dbo.sysobjects
WHERE
type
=
'P'
AND
name
=
'P_XXX'
)
BEGIN
DROP
PROCEDURE
[dbo].[P_XXX]
END
GO
CREATE
PROCEDURE
[dbo].[P_XXX]
(
@date
DATETIME
,
@Name
VARCHAR(MAX)
OUTPUT
)
AS
BEGIN
IF
EXISTS
(
SELECT
*
FROM
Daily
WHERE
Date
=
@date
)
BEGIN
SELECT
SUBSTRING(A.Name,
0,
LEN(A.Name))
FROM
(
SELECT
Name
+
','
FROM
@Record
FOR
XML
PATH('')
)
A
(
Name
)
END
ELSE
BEGIN
SELECT
@Name
=
''
END
END
GO
C#代码
SqlCommand
CMD
=
new
SqlCommand(“P_XXX”,DBCN);
CMD.CommandType
=
CommandType.StoredProcere;
CMD.Parameters.Add("@Name",SqlDbType.varchar,2000);
CMD.Parameters["@Name"].Direction
=
ParameterDirection.Output;

Ⅷ sql 存储过程

@where的值是 and a.parm_obj_id =4399

.... where a.parm='aa' @where 这是不对的
如果你必须要这样做的话,用其他方式吧

declare @SQL nvarchar(4000)
set @SQL = 'select * from tb where a.parm=''aa'' ' + @where
exec sp_executesql @sql

Ⅸ SQL 存储过程

仔细思考一下我的解决办法是否妥当:

因为过程开头部分已经定义了4个变量,并且都赋初值为'0',

那么,我们做两处变动:

1、在你的select语句执行前,我们写上4个判断,判断这4个变量是否被传入了值,未传入时怎么样处理。

2、修改select语句的where子句(语句中有三个“=”改成like)。

过多的描述也许难以看懂,我直接写出来,新增或修改的部分,我在后面用了注释“//--★”(我的写法是基于Sybase的,你可以看懂的。当然你也可以先看一下后面的【总结】):

if exists(………………………………)
drop ……………………
go
create Proc Proc_ManualSign
@BranchId varchar(10) = '0',
……………………
……………………
@UserName varchar(50) = '0'
as

begin //--★sybase写法,用于过程开始,参考你的数据库,看是否需要加

if @BranchId = '0' //--★如果@BranchId依然为初始值(未传入参数)
select @BranchId = '%' //--★那么将@BranchId赋值为'%'

if @DepartId = '0' //--★如果@DepartId依然为初始值(未传入参数)
select @DepartId = '%' //--★那么将@DepartId赋值为'%'

if @UserId = '0' //--★如果@UserId依然为初始值(未传入参数)
select @UserId = '%' //--★那么将@UserId赋值为'%'

if @UserName = '0' //--★如果@UserName依然为初始值(未传入参数)
select @UserName = '%' //--★那么将@UserName赋值为'%'

select …………
……………………
and b.BranchId like @BranchId --机构 //--★你原来的“=”改成了“like”
and d.DepartId like @DepartId --部门 //--★你原来的“=”改成了“like”
and m.UserId like @UserId --用户Id //--★你原来的“=”改成了“like”
and u.UserName like '%'+@UserName+'%' --用户名

end //--★sybase写法,用于标注过程结束,参考你的数据库,看是否需要加

go

======================================================================

【★★--总结--★★】我的办法:

4个变量初值为'0',excute执行该过程时,if语句就要依次判断各变量的当前值,判断的结果无非两种:①.未传入值(还是'0'),②.传入了值(不是'0')

①.未传入值
if语句判断出某变量未传入值,则将该变量置为'%',那么select语句的where条件中就是该字段 like '%',也就是该字段的检索条件为任意的。

②.传入了值
传入了值,则if语句的判断结果为假(False),那么直接跳出判断去执行select语句,虽然where子句的条件中用的是 like 介词,但没有通配符'%'的话,like 的作用也就是'=',即:【like '销售部'】的作用也就是 【='销售部'】,所以也满足了输入参数的精确查询要求。

执行时:

假如什么参数也不传入,即:查询全部的信息
excute Proc_ManualSign '0', '0', '0', '0'

假如仅部门和用户ID传入参数,则
excute Proc_ManualSign '0', '开发部', '319', '0'

热点内容
滑板鞋脚本视频 发布:2025-02-02 09:48:54 浏览:433
群晖怎么玩安卓模拟器 发布:2025-02-02 09:45:23 浏览:557
三星安卓12彩蛋怎么玩 发布:2025-02-02 09:44:39 浏览:744
电脑显示连接服务器错误 发布:2025-02-02 09:24:10 浏览:537
瑞芯微开发板编译 发布:2025-02-02 09:22:54 浏览:147
linux虚拟机用gcc编译时显示错误 发布:2025-02-02 09:14:01 浏览:240
java驼峰 发布:2025-02-02 09:13:26 浏览:652
魔兽脚本怎么用 发布:2025-02-02 09:10:28 浏览:538
linuxadobe 发布:2025-02-02 09:09:43 浏览:212
sql2000数据库连接 发布:2025-02-02 09:09:43 浏览:726