【发布时间】:2011-06-29 04:22:48
【问题描述】:
我写了一个存储过程。在其中我想检查一个条件,如果该条件变为真,那么我不想继续处理存储过程的其余部分。
如果返回 false,那么我想继续存储过程的剩余部分。
我的存储过程在这里:
IF (@RefPOID <> 0)
BEGIN
IF EXISTS(// SELECT STATEMENT)
BEGIN
SET @Status = 'Please select the Items'
RETURN
END
END
IF(POID = 0)
BEGIN
//INSERTION
END
ELSE
BEGIN
//DELETION
END
此存储过程已成功编译。但是在前端调用这个存储过程的时候,却报错了
System.Data.SqlClient.SqlException:一个 当前发生严重错误 命令。结果,如果有的话,应该 被丢弃。
如果我从存储过程中删除了 RETURN 语句,那么它工作正常。
如果条件变为假,当我从前端调用时,存储过程工作正常。
但我想检查那里的条件,如果是真的就返回。
我确信由于 RETURN 的存在会出现问题。
为什么会出现问题?出了什么问题?如何解决这个问题?请有任何建议。
【问题讨论】:
-
您在事务中间使用
RETURN- 您可能需要在RETURN之前添加ROLLBACK TRANSACTION以正确终止正在运行的事务... -
非常正确。查看 msdn.microsoft.com/en-us/library/ms179296(v=SQL.90).aspx> 了解在 T-SQL 中使用 TRY CATCH 的详细信息。此链接中有一个名为“TRY...CATCH with RAISERROR”的部分,msdn.microsoft.com/en-us/library/ms175976.aspx> 有一个标题为“B. Using TRY...CATCH in a transaction”的部分提供了有用的示例。
-
@marc:是的,马克。你说的绝对是真的。谢谢。
-
@Moose:非常感谢驼鹿。你说的对。感谢您的贡献。
-
@gbn:是的。我只是提到了 sp 的功能。
标签: sql sql-server-2005 sql-server-2008 stored-procedures return