SQL 存储过程(1)

变量标识符应该由两部分组成:基本部分(内容)和前缀(数据类型)P41
比如:数据类型char  前缀chr  例子@chrFirstName


identity(起始值,步长) identity属性:自动增长列
比如identity(10,2)表示从10开始,每次+2


select f1(当前表的字段) as(生成别名关键字) txzxdm(当前字段f1的别名)
into(查询建表关键字) #xbuffer(生成的新表的表名,用#开头)
from wtzc40base..xbuffer
where xzbh = @p_xzbh

set nocount on 不返回实际的计数


第三章 存储过程的设计概念

存储过程的功能:
返回信息给调用者(途径:结果集,输出参数,返回值,全局游标)
修改数据库中数据
实现业务逻辑
控制数据访问权限
改善系统性能
降低网络流量
执行其他动作和操作(电子邮件,系统命令,进程,管理其他SQL对象)

新建一个存储过程
CREATE PROCEDURE test01 as
select * from server;
GO

在查询分析器里使用刚刚创建的存储过程
exec test01;


例子:返回Make列中等于输入参数@chvMake的所有记录。
  Create Procedure prGetEquitpent
   @chvMake varchar(50),
   @chvModel varchar(50)
as
  Select *
  from Equitpment
  where Make=@chvMake
  and Model=@chvModel

执行上面的存储过程(因参数是字符型所有用'',参数之间用“,”隔开)
exec prGetEquitpent 'Toshiba','Portege 7020CT'

删除存储过程
Drop Procedure prGetEquipment

修改存储过程(避免对权限和相关数据库对象产生不必要的影响)
alter procedure test01
as
select serverID from server
return 0
go


输出参数(关键字Output)
Create procedure prGetEqId_2
   @chvMake varchar(50),
   @chvModel varchar(50)
   @intEqId int output
as
  Select @intEqId=EquitpmentId
from Equipment
where Make=@chvMake
and Model=@chvModel
此程序存在一个潜在问题:满足该标准的值可能不仅一个。


返回值(return,将参数返回给调用者。仅能返回int类型的值,主要用于返回状态信息)
Create procedure prGetEqId_3
   @chvMake varchar(50),
   @chvModel varchar(50)
as
Declare @intEqId int             // Declare 变量声明

  Select @intEqId=EquitpmentId
from Equipment
where Make=@chvMake
and Model=@chvModel

Return @intEqId

return还可以接受一个整型表达式
Create procedure prGetEqId_3
   @chvMake varchar(50),
   @chvModel varchar(50)
as
  Return(Select EquitpmentId
from Equipment
where Make=@chvMake
and Model=@chvModel)


默认值
Create procedure prGetEqId_4
   @chvMake varchar(50)='%',
   @chvModel varchar(50)='%'
as
  Select *
from Equipment
where Make Like @chvMake         //Like字符匹配,%表示任意长度的字符串
and Model Like @chvModel

执行这个存储过程(按位置传递参数)
Exec prGetEqId_4 'T%','Portege%'

服务器将返回如下结果:EquipmentId  1
                      Make         Toshiba
                      Model        Portege7020CT
                      EqTypeId     1

同时省略两个参数:
Exec prGetEqId_4

服务器将返回如下结果:EquipmentId  1  2
                      Make         Toshiba  Sony
                      Model        Portege7020CT  TR17X
                      EqTypeId     1  3


按名称传递参数:(使代码更具可读性和维护性)
Exec prGetEqId_4 @Model - 'T%'  //T%为第二个参数,第一个参数默认为%


存储过程的语法

CREATE PROC [ EDURE ] procedure_name [ ; number ]
    [ { @parameter data_type }
        [ VARYING ] [ = default ] [ OUTPUT ]
    ] [ ,...n ]

[ WITH
    { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]

[ FOR REPLICATION ]

AS sql_statement [ ...n ]

With Encryption 存储过程加密(不推荐)
With Recompile  SQL系统经济重新编译(适合开发人员)
[ ; number ] 存储过程组。

 

set ansi_nulls [on/off]    跟null等相关

set   ansi_nulls   off  
可以使用=做比较 select   *   from   a   where   price=null   若此时a中有price為NULL的就可以选出來  
而在set   ansi_nulls   on时候  
只能写                  select   *   from   a   where   price   is   null

set quoted_identifier [on/off]    跟标示符相关

   set quoted_identifier on      “当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET

QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须遵守所有 Transact-SQL 标识符规则。”

SET QUOTED_IDENTIFIER ON
SELECT * FROM "USER"  WHERE a='netasp'
SET QUOTED_IDENTIFIER ON
SELECT * FROM [USER] WHERE a='netasp'
SET QUOTED_IDENTIFIER OFF
SELECT * FROM [USER]   WHERE a="netasp"
SET QUOTED_IDENTIFIER OFF
SELECT * FROM [USER]  WHERE a= 'netasp'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值