'end of of file'附近的语法不正确。期待对话,或尝试

时间:2016-11-04 17:03:14

标签: sql-server

我很陌生。我一直在搞乱一些T-SQL,现在为了它,我正在做一些基本的密码。现在,当我这样做时,正如您在代码中看到的那样,如果您使用重复的用户名,我会设置为尝试抛出错误,如果它没有发现问题并创建帐户,则会显示“用户创建”消息或类似的东西。失败了,虽然主键确实阻止了重复用户名的插入,但它会增加身份列,留下2个用户,一个用户ID为1,另一个用户ID为17.此外,它不会引发错误,只是说执行命令。因此,为了尝试强制错误,我已经为我的代码完成了一些非常意大利面条的事情,现在它在最后给了我一个不正确的语法错误。

确切的错误与标题中的“文件末尾附近的语法不正确”相同。期待对话,或者尝试。“我不知道为什么。我已经搜索了一下,我似乎无法找到任何有这个错误的人,或者理解为什么它会期待这些事情,所以我迷路了。享受意大利面条代码的荣耀;如果你能想出一种方法来解决不从存储过程中抛出错误而不是修复错误的语法错误的初始问题,那也是受欢迎的。

ALTER procedure [dbo].[adduser]
    @pUsername nvarchar(50),
    @pPassword nvarchar(50),
    @responsemessage nvarchar(250) output,
    @saveme nvarchar(30) = 'Duplicate username' 
as 
set nocount on
begin


    declare @salt UNIQUEIDENTIFIER=newid()
        begin tran

        begin try
            if exists ((select Username from UserLogins where Username = @pUsername)) 
                begin  
                    rollback tran 
                    raiserror(1337, 16, @saveme)
                end   
                else 
                    begin try

                        insert into dbo.UserLogins (Username, PasswordHash, Salt)
                        values(@pUsername, hashbytes('SHA2_512', @pPassword+cast(@salt as nvarchar(36))), @salt)
                            set @responsemessage='User created'

                    end try 
                    begin catch
                        set @responsemessage = ERROR_MESSAGE()
                    end catch  

end

1 个答案:

答案 0 :(得分:-4)

alter procedure [dbo].[adduser]
    @pUsername nvarchar(50),
    @pPassword nvarchar(50),
    @responsemessage nvarchar(250) output
as 
begin

set nocount on

        begin try 
            declare @salt UNIQUEIDENTIFIER=newid()
            declare @saveme nvarchar(20) = 'Duplicate username' 
            begin tran t1
                if exists ((select Username from UserLogins  where Username = @pUsername)) 
                    begin  
                        raiserror(@saveme,16, 1)
                    end   
                else 
                    begin
                        insert into UserLogins  (Username, Password, Salt)
                        values(@pUsername, hashbytes('SHA2_512', @pPassword+cast(@salt as nvarchar(36))), @salt)
                        set @responsemessage='User created'
                    end 
            commit tran t1
        end try
        begin catch
                set @responsemessage = ERROR_MESSAGE()
                rollback tran t1
        end catch 


end