我是SQL的新手,第一次创建存储过程。
我应该插入数据并得到一个返回字符串。返回值应该是 成功插入 ,或者如果失败,应该通知我是否有一个 用户名 已经存在......或者类似的东西,但是
我被困在 错误的 代码中 。
因此,这里是我的代码。
Create Proc Mock_InsertUser
@Username varchar(20),
@Password varchar(100),
@fullName varchar(60),
@Activated bit,
@Suspended bit
Begin
DECLARE
@Error INT,
@rowcount INT,
@log varchar(1000)
IF EXISTS(SELECT username FROM Users_mock WHERE username = @Username)
BEGIN
SET @log = 'Username ' + @Username + ' already exists.'
GOTO ERROR
Insert into Users_mock
(username, [password], full_name, Activated, Suspended)
values
(@Username, @Password, @fullName, @Activated, @Suspended)
SELECT @Error = @@ERROR, @rowcount = @@ROWCOUNT
--if there is an error OR If row is not inserted..
IF @Error <> 0 OR @rowcount < 1
BEGIN
SET @log = 'Failed to Insert Account.'
GOTO ERROR
-----------------------------------------------------------
Error:
--Some code here
对不起,我的问题很蹩脚 :)
你为什么不使用这样的东西。
CREATE PROCEDURE dbo.Mock_InsertUser (@Username VARCHAR(20), @Password VARCHAR(100), @fullName VARCHAR(60), @Activated BIT, @Suspended BIT ) BEGIN BEGIN TRY DECLARE @Error INT, @rowcount INT, @log VARCHAR(1000) -- check if user exists IF EXISTS (SELECT * FROM dbo.Users_mock WHERE username = @Username) BEGIN -- yes - just define the response message SET @log = 'Username ' + @Username + ' already exists.' ELSE BEGIN -- doesn't exist - insert data INSERT INTO dbo.Users_mock(username, [password], full_name, Activated, Suspended) VALUES (@Username, @Password, @fullName, @Activated, @Suspended) -- set response message SET @log = 'Username ' + @Username + ' successfully inserted.' END TRY BEGIN CATCH -- handle exceptions - you can access error details here, too, if you need to SET @log = 'Some really weird error happened.' END CATCH -- return the message back to the caller SELECT @Log
要看的点。
使用
像C#一样处理异常- 不需要不断检查BEGIN TRY/END TRY - BEGIN CATCH/END CATCH
值 ....@@ERROR
基本上只是检查用户是否存在--相应地设置
消息。如果用户不存在,就插入它并将@Log
消息设置为 "成功"@Log
不需要标签、GOTO和其他类似的东西....