📄 2.sql
字号:
ELSE --其他未知错误
BEGIN
ROLLBACK TRANSACTION --遇到错误则回滚事务
SELECT @ReturnValue = 1
RETURN
END
COMMIT TRANSACTION --提交事务
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
/*验证用户名与密码,并输出验证结果,用户编号,真实姓名和用户类型*/
CREATE PROC dbo.IsValidUser
(
@UserName varchar(100), --用户名
@Password varchar(100), --密码
@UserID int OUTPUT, --用户编号
@TrueName varchar(10) OUTPUT, --真实姓名
@UserType bit OUTPUT, --用户类型
@ReturnValue int OUTPUT --输出值(VB组件的自定义枚举值),1为合法用户, 2为用户名错,3为密码错
)
AS
/*验证是否在数据库中有匹配的用户名*/
DECLARE @RightPwd varchar(100)
SELECT TOP 1 @RightPwd = Password, @UserID = UserID, @TrueName = TrueName, @UserType = UserType FROM UserInfo WHERE UserName = @UserName ORDER BY UserName
/*用户名不存在*/
IF @RightPwd IS NULL
BEGIN
SET @ReturnValue = 2 --返回用户名错
RETURN
END
/*用户名存在则比较密码(区分大小写)*/
IF @RightPwd <> @Password
BEGIN
SET @ReturnValue = 3 --返回密码错
RETURN
END
/*用户名和密码都存在则记录登录时间*/
UPDATE UserInfo SET LastLoginTime=GetDate() WHERE UserName = @UserName
SET @ReturnValue = 1
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
/*添加一条销售信息,输出销售编号和操作结果*/
CREATE PROC dbo.SaleAddNew
(
@GoodsID int, --商品编号
@Amount decimal(18, 2), --进货数量
@UnitPrice smallmoney, --单价
@RegistrarID int, --登记员编号
@Remark varchar(1000), --备注
@ID int OUTPUT, --进货编号
@ReturnValue int OUTPUT --执行结果(VB组件的自定义枚举值)
)
AS
DECLARE @ErrNo int --保存错误号
BEGIN TRANSACTION --开始事务
/*
手动维护数据完整性的代码。如果没有创建外键约束,请取消这段代码的注释
验证是否存在商品编号,若否则不能添加
DECLARE @ExistID bit
EXEC ExistByID 'Goods', 'GoodsID', @GoodsID, @ExistID OUTPUT
IF @ExistID = 0 --商品编号不存在
BEGIN
ROLLBACK TRANSACTION --回滚事务
SELECT @ReturnValue = 2 --返回VB组件的自定义枚举值
RETURN --结束存储过程
END
*/
/*添加记录*/
INSERT INTO Sale Values(@GoodsID, @Amount, @UnitPrice, @RegistrarID, GetDate(), @Remark)
--记录当前的错误号
SELECT @ErrNo = @@ERROR
/*输出参数*/
IF @ErrNo = 0 --没有发生错误
BEGIN
SELECT @ID = (SELECT MAX(SaleID) FROM Sale)
SELECT @ReturnValue = 0
END
ELSE IF @ErrNo = 547 --发生外键冲突
BEGIN
ROLLBACK TRANSACTION --遇到错误则回滚事务
SELECT @ReturnValue = 2
RETURN
END
ELSE --其他未知错误
BEGIN
ROLLBACK TRANSACTION --遇到错误则回滚事务
SELECT @ReturnValue = 1
RETURN
END
COMMIT TRANSACTION --提交事务
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
/*删除一条销售信息,输出执行结果*/
CREATE PROC dbo.SaleDelete
(
@SaleID int, --销售编号
@ReturnValue int OUTPUT --执行结果(VB组件的自定义枚举值)
)
AS
BEGIN TRANSACTION --开始事务
/*验证是否存在销售编号,若否则不能删除*/
DECLARE @ExistID bit
EXEC ExistByID 'Sale', 'SaleID', @SaleID, @ExistID OUTPUT
IF @ExistID = 0 --销售编号不存在
BEGIN
ROLLBACK TRANSACTION --回滚事务
SELECT @ReturnValue = 2 --返回VB组件的自定义枚举值
RETURN --结束存储过程
END
/*删除记录*/
DELETE FROM Sale WHERE SaleID = @SaleID
/*输出参数*/
IF @@ERROR = 0
SELECT @ReturnValue = 0
ELSE
BEGIN
ROLLBACK TRANSACTION --遇到错误则回滚事务
SELECT @ReturnValue = 1
RETURN
END
COMMIT TRANSACTION
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
/*更新一条销售信息,输出执行结果*/
CREATE PROC dbo.SaleUpdate
(
@SaleID int, --销售编号
@GoodsID int, --商品编号
@Amount decimal(18, 2), --进货数量
@UnitPrice smallmoney, --单价
@RegistrarID int, --登记员编号
@Remark varchar(1000), --备注
@ReturnValue int OUTPUT --执行结果(VB组件的自定义枚举值)
)
AS
BEGIN TRANSACTION --开始事务
/*验证是否存在销售编号,若否则不能更新*/
DECLARE @ExistID bit
EXEC ExistByID 'Sale', 'SaleID', @SaleID, @ExistID OUTPUT
IF @ExistID = 0 --销售编号不存在
BEGIN
ROLLBACK TRANSACTION --回滚事务
SELECT @ReturnValue = 2 --返回VB组件的自定义枚举值
RETURN --结束存储过程
END
/*更新记录*/
UPDATE Sale SET GoodsID = @GoodsID, Amount = @Amount, UnitPrice = @UnitPrice, RegistrarID = @RegistrarID, RegDate = GetDate(), Remark = @Remark WHERE SaleID = @SaleID
/*输出参数*/
IF @@ERROR = 0
SELECT @ReturnValue = 0
ELSE
BEGIN
ROLLBACK TRANSACTION --遇到错误则回滚事务
SELECT @ReturnValue = 1
RETURN
END
COMMIT TRANSACTION --提交事务
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
/*添加一条报损信息,输出报损编号和操作结果*/
CREATE PROC dbo.SpoilageAddNew
(
@BuyID int, --进货编号
@Amount decimal(18, 2), --报损数量
@Reportor varchar(10), --报损员
@Reason varchar(1000), --报损原因
@RegistrarID int, --登记员编号
@ID int OUTPUT, --报损编号
@ReturnValue int OUTPUT --执行结果(VB组件的自定义枚举值)
)
AS
DECLARE @ErrNo int --保存错误号
BEGIN TRANSACTION --开始事务
/*
手动维护数据完整性的代码。如果没有创建外键约束,请取消这段代码的注释
验证是否存在进货编号,若否则不能添加
DECLARE @ExistID bit
EXEC ExistByID 'Buy', 'BuyID', @BuyID, @ExistID OUTPUT
IF @ExistID = 0 --进货编号不存在
BEGIN
ROLLBACK TRANSACTION --回滚事务
SELECT @ReturnValue = 2 --返回VB组件的自定义枚举值
RETURN --结束存储过程
END
*/
/*添加记录*/
INSERT INTO Spoilage Values(@BuyID, @Amount, @Reportor, @Reason, @RegistrarID, GetDate())
--记录当前的错误号
SELECT @ErrNo = @@ERROR
/*输出参数*/
IF @ErrNo = 0 --没有发生错误
BEGIN
SELECT @ID = (SELECT MAX(SpoilageID) FROM Spoilage)
SELECT @ReturnValue = 0
END
ELSE IF @ErrNo = 547 --发生外键冲突
BEGIN
ROLLBACK TRANSACTION --遇到错误则回滚事务
SELECT @ReturnValue = 2
RETURN
END
ELSE --其他未知错误
BEGIN
ROLLBACK TRANSACTION --遇到错误则回滚事务
SELECT @ReturnValue = 1
RETURN
END
COMMIT TRANSACTION --提交事务
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
/*删除一条报损信息,输出执行结果*/
CREATE PROC dbo.SpoilageDelete
(
@SpoilageID int, --报损编号
@ReturnValue int OUTPUT --执行结果(VB组件的自定义枚举值)
)
AS
BEGIN TRANSACTION --开始事务
/*验证是否存在报损编号,若否则不能删除*/
DECLARE @ExistID bit
EXEC ExistByID 'Spoilage', 'SpoilageID', @SpoilageID, @ExistID OUTPUT
IF @ExistID = 0 --报损信息不存在
BEGIN
ROLLBACK TRANSACTION --回滚事务
SELECT @ReturnValue = 2 --返回VB组件的自定义枚举值
RETURN --结束存储过程
END
/*删除记录*/
DELETE FROM Spoilage WHERE SpoilageID = @SpoilageID
/*输出参数*/
IF @@ERROR = 0
SELECT @ReturnValue = 0
ELSE
BEGIN
ROLLBACK TRANSACTION --遇到错误则回滚事务
SELECT @ReturnValue = 1
RETURN
END
COMMIT TRANSACTION --提交事务
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
/*更新一条报损信息,输出执行结果*/
CREATE PROC dbo.SpoilageUpdate
(
@SpoilageID int, --报损编号
@BuyID int, --进货编号
@Amount decimal(18, 2), --报损数量
@Reportor varchar(10), --报损人
@Reason varchar(1000), --报损原因
@RegistrarID int, --登记员编号
@ReturnValue int OUTPUT --执行结果(VB组件的自定义枚举值)
)
AS
DECLARE @ErrNo int --保存错误号
BEGIN TRANSACTION --开始事务
/*验证是否存在报损编号,若否则不能更新*/
DECLARE @ExistID bit
EXEC ExistByID 'Spoilage', 'SpoilageID', @SpoilageID, @ExistID OUTPUT
IF @ExistID = 0 --报损编号不存在
BEGIN
ROLLBACK TRANSACTION --回滚事务
SELECT @ReturnValue = 2 --返回VB组件的自定义枚举值
RETURN --结束存储过程
END
/*
手动维护数据完整性的代码。如果没有创建外键约束,请取消这段代码的注释
验证是否存在进货编号,若否则不能添加
DECLARE @ExistID bit
EXEC ExistByID 'Buy', 'BuyID', @BuyID, @ExistID OUTPUT
IF @ExistID = 0 --进货编号不存在
BEGIN
ROLLBACK TRANSACTION --回滚事务
SELECT @ReturnValue = 2 --返回VB组件的自定义枚举值
RETURN --结束存储过程
END
*/
/*更新记录*/
UPDATE Spoilage SET BuyID = @BuyID, Amount = @Amount, Reportor = @Reportor, Reason = @Reason, RegistrarID = @RegistrarID, RegDate = GetDate() WHERE SpoilageID = @SpoilageID
--记录当前的错误号
SELECT @ErrNo = @@ERROR
/*输出参数*/
IF @ErrNo = 0 --没有发生错误
SELECT @ReturnValue = 0
ELSE IF @ErrNo = 547 --发生外键冲突
BEGIN
ROLLBACK TRANSACTION --遇到错误则回滚事务
SELECT @ReturnValue = 2
RETURN
END
ELSE --其他未知错误
BEGIN
ROLLBACK TRANSACTION --遇到错误则回滚事务
SELECT @ReturnValue = 1
RETURN
END
COMMIT TRANSACTION --提交事务
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
/*添加供货商,输出供货商编号和操作结果*/
CREATE PROC dbo.SupplierAddNew
(
@SupplierName varchar(100), --供货商名称
@Contact varchar(1000), --联系方式
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -