Orders表使用存储过程
使用存储过程
在Orders表中插入一个新订单。此程序仅适用于SQL Server,但它说明了存储过程的某些用途和技术:
输入▼
CREATE PROCEDURE NewOrder @cust_id CHAR(10)
AS-- Declare variable fororder number
DECLARE @order_num INTEGER
-- Get current highest order number
SELECT@order_num=MAX(order_num)
FROM Orders
-- Determine next order number
SELECT @order_num=@order_num+1
-- Insert new order
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(@order_num, GETDATE(),@cust_id)
-- Return order number
RETURN @order_num;
分析▼此存储过程在Orders表中创建一个新订单。它只有一个参数,即下订单顾客的ID。订单号和订单日期这两列在存储过程中自动生成。代码首先声明一个局部变量来存储订单号。接着,检索当前最大订单号(使用MAX()函数)并增加1(使用SELECT语句)。然后用INSERT语句插入由新生成的订单号、当前系统日期(用GETDATE()函数检索)和传递的顾客ID组成的订单。最后,用RETURN@order_num返回订单号(处理订单物品需要它)。请注意,此代码加了注释,在编写存储过程时应该多加注释。
说明:注释代码
应该注释所有代码,存储过程也不例外。增加注释不影响性能,因此不存在缺陷(除了增加编写时间外)。注释代码的好处很多,包括使别人(以及你自己)更容易地理解和更安全地修改代码。对代码进行注释的标准方式是在之前放置--(两个连字符)。有的DBMS还支持其他的注释语法,不过所DBMS都支持--,因此在注释代码时最好都使用这种语法。
下面是相同SQL Server代码的一个很不同的版本:
输入▼
CREATE PROCEDURE NewOrder @cust_id CHAR(10)
AS-- Insert new order
INSERT INTO Orders(cust_id)
VALUES(@cust_id)
-- Returnorder number
SELECT order_num = @@IDENTITY;
分析▼此存储过程也在Orders表中创建一个新订单。这次由DBMS生成订单号。大多数DBMS都支持这种功能;SQL Server中称这些自动增量的列为标识字段(identity field),而其他DBMS称之为自动编号(autonumber)或序列(sequence)。传递给此过程的参数也是一个,即下订单的顾客ID。订单号和订单日期没有给出,DBMS对日期使用默认值(GETDATE()函数),订单号自动生成。怎样才能得到这个自动生成的ID?在SQL Server上可在全局变量@@IDENTITY中得到,它返回到调用程序(这里使用SELECT语句)。可以看到,借助存储过程,可以有多种方法完成相同的工作。不过,所选择的方法受所用DBMS特性的制约。
下一篇: Oracle中decode函数用法
推荐阅读
-
Mysql - 存储过程 - 定时删表
-
SQL Server 存储过程遇到“表 ''#TT'' 没有标识属性无法执行 SET 操作”错误
-
ASP之简化创建关闭记录集对象并创建使用简单的MSSQL存储过程
-
MSSQL监控数据库的DDL操作(创建,修改,删除存储过程,创建,修改,删除表等)
-
MySQL 存储过程和"Cursor"的使用方法
-
编程开发之--Oracle数据库--存储过程在out参数中使用光标(3)
-
sql server 查询某个表被哪些存储过程调用
-
sqlserver数据库使用存储过程和dbmail实现定时发送邮件
-
mssql使用存储过程破解sa密码
-
存储过程介绍以及使用(转账,分页)