写一个存储过程,一个输入参数,一个输出参数, 里面用到了事务。 该怎样写?

yshawxp 2003-11-24 12:06:23
CREATE PROCEDURE up_Accounts_DeleteUser
@UserID int --输入参数
AS
BEGIN TRANSACTION
DELETE FROM Accounts_User WHERE UserID = @UserID
DELETE FROM Accounts_User WHERE UserID = @UserID
COMMIT TRANSACTION
GO
---------------------------------
我的要求是: 当事务失败的时候,存储过程返回0
事务成功的时候,存储过程返回1

谢谢!
...全文
60 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
txlicenhe 2003-11-24
  • 打赏
  • 举报
回复
CREATE PROCEDURE up_Accounts_DeleteUser
@UserID int --输入参数
AS
BEGIN TRANSACTION
DELETE FROM Accounts_User WHERE UserID = @UserID
if @@error <> 0
begin
rollback
return 0
end
DELETE FROM Accounts_User WHERE UserID = @UserID
if @@error <> 0
begin
rollback
return 0
end
COMMIT TRANSACTION
return 1
GO
---------------------------------
我的要求是: 当事务失败的时候,存储过程返回0
事务成功的时候,存储过程返回1

谢谢!

zjcxc 元老 2003-11-24
  • 打赏
  • 举报
回复
CREATE PROCEDURE up_Accounts_DeleteUser
@UserID int --输入参数
AS
BEGIN TRANSACTION
DELETE FROM Accounts_User WHERE UserID = @UserID
if @@error<>0 goto lb_r
DELETE FROM Accounts_User WHERE UserID = @UserID
if @@error<>0 goto lb_r
COMMIT TRANSACTION
return 1
lb_r:
rollback tran
return 0
GO
pengdali 2003-11-24
  • 打赏
  • 举报
回复
CREATE PROCEDURE up_Accounts_DeleteUser
@UserID int --输入参数
AS
BEGIN TRANSACTION
DELETE FROM Accounts_User WHERE UserID = @UserID
if @@error>0 goto error
DELETE FROM Accounts_User WHERE UserID = @UserID
if @@error>0 goto error
COMMIT TRANSACTION
set @uerid=1
return

error:
rollback tran
set @userid=0
GO
pengdali 2003-11-24
  • 打赏
  • 举报
回复
CREATE PROCEDURE up_Accounts_DeleteUser
@UserID int --输入参数
AS
BEGIN TRANSACTION
DELETE FROM Accounts_User WHERE UserID = @UserID
if @@error>0 goto error
DELETE FROM Accounts_User WHERE UserID = @UserID
if @@error>0 goto error
COMMIT TRANSACTION
return 1

error:
rollback tran
return 0
GO
yshawxp 2003-11-24
  • 打赏
  • 举报
回复
谢谢各位了!
zjcxc 元老 2003-11-24
  • 打赏
  • 举报
回复
调试存储过程:

SQL 2000查询分析器
--左连的对象浏览器(没有的话按F8)
--对象项中
--右键调试的存储过程
--调试
--输入参数(必须输入所有的参数,包括默认值/输出参数
--点击执行
--出现一个浮动工具条
--上面有单步执行,断点设置等
zjcxc 元老 2003-11-24
  • 打赏
  • 举报
回复
--你的存储过程要改为:
CREATE PROCEDURE up_Accounts_DeleteUser
@UserID int, --输入参数
@Result int out --输出参数(我加上去的)
AS
BEGIN TRANSACTION
DELETE FROM Accounts_User WHERE UserID = @UserID
IF @@ERROR <> 0
BEGIN
ROLLBACK
SET @Result = -1
return
END

DELETE FROM Accounts_User WHERE UserID = @UserID
IF @@ERROR <> 0
BEGIN
ROLLBACK
SET @Result = -1
return
END

COMMIT TRANSACTION
SET @Result = 1
GO
txlicenhe 2003-11-24
  • 打赏
  • 举报
回复
SQL2000:
查询分析器->找到存储过程->右键->调试
pengdali 2003-11-24
  • 打赏
  • 举报
回复
你用goto不行?
yshawxp 2003-11-24
  • 打赏
  • 举报
回复
就是说说步骤哦!1步 -》 2步-》 。。。。
yshawxp 2003-11-24
  • 打赏
  • 举报
回复
我综合了上面几位的答案!

我这样写 对吗?

CREATE PROCEDURE up_Accounts_DeleteUser
@UserID int, --输入参数
@Result int out --输出参数(我加上去的)
AS
BEGIN TRANSACTION
DELETE FROM Accounts_User WHERE UserID = @UserID
IF @@ERROR <> 0
BEGIN
ROLLBACK
SET @Result = -1
END

DELETE FROM Accounts_User WHERE UserID = @UserID
IF @@ERROR <> 0
BEGIN
ROLLBACK
SET @Result = -1
END

COMMIT TRANSACTION
SET @Result = 1
GO

顺便问一下 在SQL2000管理器里 怎样debug SQL语句 和sql存储过程的?

谢谢!!!
yshawxp 2003-11-24
  • 打赏
  • 举报
回复
谢谢! 大力 这是我的另一个问题!
txlicenhe 2003-11-24
  • 打赏
  • 举报
回复
哈哈,大力怎么搞的? 发错地方了?
pengdali 2003-11-24
  • 打赏
  • 举报
回复
使用 Unicode 数据
Unicode 标准为全球商业领域中广泛使用的大部分字符定义了一个单一编码方案。所有的计算机都用单一的 Unicode 标准 Unicode 数据中的位模式一致地翻译成字符。这保证了同一个位模式在所有的计算机上总是转换成同一个字符。数据可以随意地从一个数据库或计算机传送到另一个数据库或计算机,而不用担心接收系统是否会错误地翻译位模式。

对于用一个字节编码每个字符的数据类型,存在的问题之一就是此数据类型只能表示 256 个不同的字符。这就迫使对于不同的字母表(例如相对较小的欧洲字母表)采用多重编码规格(或者代码页)。而且也不可能处理象日文汉字或韩国文字这样具有数千个字符的字母表。

每个 Microsoft® SQL Server™ 排序规则都有一个对表示 char、varchar 和 text 值中的每个字符定义位模式进行定义的代码页。可为个别的列和字符常量指派不同的代码页。客户端计算机使用与操作系统区域设置相关联的代码页解释字符位模式。有很多种不同的代码页。一些字符出现在某些代码页上,但并不出现在其它的代码页上。某些字符在一些代码页上用一个位模式定义,而在其它的代码页上却用另一个位模式定义。当您设计必须处理不同语言的国际性系统时,为了满足不同国家/地区的语言需求,给所有的计算机挑选代码页就变得困难了。要保证每一台计算机与使用不同代码页的系统交互时都进行正确的翻译也是困难的。

Unicode 规格通过采用两个字节编码每个字符使这个问题迎刃而解。转换最通用商业语言的单一规格具有足够多的 2 字节的模式 (65,536)。因为所有的 Unicode 系统均一致地采用同样的位模式来代表所有的字符,所以当从一个系统转到另一个系统时,将不会存在未正确转换字符的问题。通过在整个系统中使用 Unicode 数据类型,可尽量减少字符转换问题。

在 Microsoft SQL Server 中,以下数据类型支持 Unicode 数据:

nchar


nvarchar


ntext


说明 这些数据类型的前缀 n 来自 SQL-92 标准中的 National(Unicode)数据类型。

nchar、nvarchar 和 ntext 的用法分别与 char、varchar 和 text 的用法一样,但在以下方面不同:

Unicode支持的字符范围更大。


存储 Unicode 字符所需要的空间更大。


nchar 和 nvarchar 列最多可以有 4,000 个字符,而不象 char 和 varchar 字符那样可以有 8,000 个字符。


Unicode 常量使用 N 开头来指定:N'A Unicode string'。


所有 Unicode 数据都使用相同的 Unicode 代码页。排序规则不控制用于 Unicode 列的代码页,仅控制比较规则和是否区分大小写等特性。
pengdali 2003-11-24
  • 打赏
  • 举报
回复
Unicode 数据
在 Microsoft® SQL Server™ 2000 中,传统上非 Unicode 数据类型允许使用由特定字符集定义的字符。字符集是在安装 SQL Server 时选择的,不能更改。使用 Unicode 数据类型,列可存储由 Unicode 标准定义的任何字符,包含由不同字符集定义的所有字符。Unicode 数据类型需要相当于非 Unicode 数据类型两倍的存储空间。

Unicode 数据使用 SQL Server 中的 nchar、varchar 和 ntext 数据类型进行存储。对于存储来源于多种字符集的字符的列,可采用这些数据类型。当列中各项所包含的 Unicode 字符数不同时(至多为 4000),使用 nvarchar 类型。当列中各项为同一固定长度时(至多为 4000 个 Unicode 字符),使用 nchar 类型。当列中任意项超过 4000 个 Unicode字符时,使用 ntext 类型。



说明 SQL Server 的 Unicode 数据类型是基于 SQL-92 标准中的国家字符数据类型。SQL-92 使用前缀字符 n 标识这些数据类型及其值。

34,499

社区成员

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

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