|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册账号
×
RETURN语句可以从查询或存储过程中退出,也可以返回整数的状态值(返回
代码)。
如果返回值为0表示成功。返回值在0到-14之间当前可以使用,返回值在
-15到-99之间是为将来使用而保留的。如果用户自定义的返回值没有被提供,
则使用SQL Server值。用户定义的返回值优先于SQLServer提供的返回值。第八章实现存储过程155
下面的例子创建了名为GetOrders的存储过程,以通过查询Qry视图从Orders
表和Customers表中检索信息。在GetOrders存储过程中的RETURN语句返回从
SELECT语句到另一个存储过程之间所有的行数。也可以在另一个存储过程中嵌套
GetOrders存储过程。
USE Northwind
GO
CREATE PROCEDURE dbo.GetOrders
@CustomerlD nchar(10)
AS
SELECT OrderID,CustomerID,EmployeeID
FROM[Orders Qry]
WHERE CustomerID=@CustomerlD
RETURN(@@ROWCOUNT)
GO
8.5.2 Sp_addmessage存储过程
Sp_addmessage存储过程允许开发者创建自定义的错误信息。SQL Server以
同样的方式对待系统和自定义错误信息。所有信息都存储在master数据库的
sysmessage表中。这些错误信息可以被自动写入到Windows 2000应用程序日志
中。
下面的例子创建一个用户定义的错误信息,以在信息产生时要求信息被写入
到Windows 2000应用程序日志中。
EXEC sp_addmessage
@msgnum=50010,
@severity=10,
@msgtext='Customercannotbedeleted.',
@with_log='true'
@@error
该系统存储过程包括大多数最近执行的Transact-SQL语句的错误编号。在
执行每个语句时进行清除和重设置。如果语句成功执行,将返回为0的值。可以
使用@@error系统函数来探测指定的错误编号或有条件地退出存储过程。
下面的例子在Northwind数据库中创建名为AddSupplierProduct的存储过
程。该存储过程使用@@error系统函数来在每个INSERT语句被执行时确定是否发
生错误。如果发生错误,事务处理将撤销。
USE NorthwindMCSE 2000系列—SQL 2000编程
GO
CREATE PROCEDURE dbo.AddSupplierProduct
@CompanyName nvarchar(40)=NULL,
@ContactName nvarchar(40)=NULL,
@ContactTitle nvarchar(40)=NULL,
@Addressnvarchar(60)=NULL,
@City nvarchar(15)=NULL,
@Region nvarchar(40)=NULL,
@PostalCode nvarchar(10)=NULL,
@Country nvarchar(15)=NULL,
@Phone nvarchar(24)=NULL,
@Fax nvarchaf(24)=NULL,
@HomePage ntext=NULL,
@ProductName nvarchaf(40)=NULL,
@CategoryID int=NULL,
@QuandtityPerUnit nvarchar(20)=NULL,
@UnitPrice money=NULL,
@UnitlnStock smallint=NULL,
@UnitsOnOrder smallint=NULL,
@ReorderLevel smallint=NULL,
@Discontinued bit=NULL
AS
BEGIN TRANSACTION
INSERT Suppliers(
CompanyNamc,
ContactName,
Address,
City,
Region,
PostalCode,
Country,
Phone)
VALUES(
@CompanyName,
@ContactName,第八章实现存储过程157
@Address,
@City,
@Region,
@PostalCode,
@Country,
@Phone)
IF@@error<>0
BEGIN
ROLLBACK TRAN
RETURN
END
DECLARE@InsertSupplierID int
SELECT@InsertSupplierID=@@identity
INSERT Products(
ProductName,
SupplierlD,
CategoryID,
QuantityPerUnit,
Discontinued)
VALUES(
@ProductName,
@InsertSupplierIID,
@CategoryID,
@QuantityPerUnit,
@Discontinued)
IF@@error<>0
BEGIN
ROLLBACK TRAN
RETURN
END
COMMIT TRANSACTION
8.5.3 RAISERROR语句
RAISERROR语句返回用户定义的错误信息并设置一个系统标志来记录错误的
发生。MCSE 2000系列—SQL 2000编程
在使用RAISERROR语句时必须指定错误安全级别和信息状态,例如
RAISERROR(50010,16,1)WITH LOG。
RAISERROR语句允许应用程序检索master...sysmessages系统表中的条目
或建立与用户定义的安全级别和状态信息有关的动态信息。RAISERROR语句向SQL
Server Error Log和Windows 2000应用程序日志写错误信息。
注意:PRINT语句返回一个用户定义的信息到客户机的消息处理器,与
RAISERROR语句不同,PRINT语句不在@@error系统函数中存储错误编号。 |
|