好心人帮帮忙,帮我看一下这段存储过程老是报错。

apple009 2007-09-06 02:34:14
ALTER PROCEDURE dbo.sp_CompanyInfo_update
@CMD NVARCHAR(20)='',
@CompanyID INT=0,
@CompanyCode NVARCHAR(20),
@CompanyName NVARCHAR(200)='',
@CompanyDesc NVARCHAR(4000)='',
@Password NVARCHAR(50)='',
@HREmail NVARCHAR(50)='',
@CompanyPhone NVARCHAR(50)='',
@HRPhone NVARCHAR(50)='',
@CompanyEmail NVARCHAR(50)='',
@Grade INT=0,
@Status INT='0'
AS
IF @CMD IS NULL
BEGIN
PRINT N'PARAM @CMD CAN NOT IS NULL!'
RETURN 0
END


BEGIN TRANSACTION
IF(@CMD='INSERT')
BEGIN
IF(SELECT COUNT(*) FROM CompanyInfo WHERE CompanyCode=@CompanyCode)>0
RETURN 0
INSERT INTO CompanyInfo
(
CompanyCode,
CompanyName,
PassWord,
HREmail,
CompanyEmail,
HRPhone,
CompanyPhone,
Grade,
Status
)
VALUES
(
@CompanyCode,
@CompanyName,
@PassWord,
@HREmail,
@CompanyEmail,
@HRPhone,
@CompanyPhone,
@Grade,
@Status
)
END
ELSE IF(@CMD='UPDATE')
BEGIN
UPDATE CompanyInfo SET
CompanyCode=@CompanyCode,
CompanyName=@CompanyName,
PassWord=@PassWord,
HREmail=@HREmail,
CompanyEmail=CompanyEmail,
HRPhone=@HRPhone,
CompanyPhone=CompanyPhone,
Grade=@Grade,
Status=@Status
WHERE CompanyID=@CompanyID
END
ELSE IF(@CMD='DELETE')
BEGIN
UPDATE CompanyInfo SET Status=-1 WHERE CompanyID=@CompanyID
UPDATE JobsInfo SET Status='0' WHERE CompanyID=@CompanyID
END


ELSE IF(@CMD='SELECT')
BEGIN
IF(@PassWord<>''AND @CompanyCode<>'')
SELECT TOP 1 * FROM CompanyInfo WHERE CompanyCode=@CompanyCode AND PassWord=@Password
ELSE IF(@CompanyID>0)
SELECT TOP 1 *FROM CompanyInfo WHERE CompanyID=@CompanyID
ELSE IF(@CompanyCode<>'')
SELECT TOP 1* FROM CompanyInfo WHERE CompanyCode=@CompanyCode
ELSE
RETURN 0
END


IF @@ERROR<>0
BEGIN
ROLLBACK TRANSACTION
RETURN
END
ELSE
BEGIN
COMMIT TRANSACTION
RETURN
END
RETURN


报的错是:
System.Data.SqlClient.SqlException: Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRANSACTION statement is missing. Previous count = 6, current count = 7.
指点一下。
...全文
153 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
生活真美好 2007-09-06
  • 打赏
  • 举报
回复
4、运行正误,应有返回值,以便提示和后期处理,应使用output明确表示。

同意楼上的说明,事务没有结束处理。



生活真美好 2007-09-06
  • 打赏
  • 举报
回复
1、IF @CMD IS NULL,用print检查,能成功吗,好象无法判断。
2、IF @@ERROR<>0
BEGIN
ROLLBACK TRANSACTION
RETURN
END
ELSE
BEGIN
COMMIT TRANSACTION
RETURN
能否简化
IF @@ERROR<>0
BEGIN
ROLLBACK TRANSACTION
RETURN
END
COMMIT TRANSACTION
3、各调整数据的语句后应有错误判断和错误处理,而不是用一个总的判断,因总的判断,只能判断最后一句的运行是否正确。
缘中人 2007-09-06
  • 打赏
  • 举报
回复
你的里边有2处RETURN 0,但没有ROLLBACK TRANSACTION
forever_forest 2007-09-06
  • 打赏
  • 举报
回复
鄙视0分帖

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧