2016-11-04 4 views
0

私はこれでとても新しいです。私はいくつかのT-SQLを使いこなしていましたが、今のところ私は基本的なパスワードを使っています。今、私がこれをしたとき、あなたがコードで見ているように、重複したユーザ名を使用するとエラーを投げてしまい、問題が見つからずにアカウントを作成すると "User created"または何かの並べ替え。これは失敗し、主キーが重複したユーザー名の挿入を防止していた間に、IDの列を増分して2人のユーザー、UserID 1のユーザー、UserID 17のユーザーを残してしまいます。エラー、単にコマンドが実行されたと言っています。だから、エラーを強制しようとすると、おそらく私のコードにスパゲッティのものがいくつかあったのですが、最後に誤った構文エラーが出ています。'ファイルの終わり'付近の構文が正しくありません。 CONVERSATION、またはTRY

正確なエラーは、「ファイルの終わり付近の構文が間違っています。」というタイトルと同じです。 CONVERSATION、またはTRYを期待しています。 "と私は理由を知らない。私はちょっと調べてみましたが、このエラーで他の誰かを見つけることができないか、どちらかが期待される理由を理解できないので、私は迷っています。私のスパゲッティコードの栄光を満喫してください。誤った構文エラーを修正するのではなく、ストアドプロシージャからエラーをスローしないという初期の問題を修正する方法を考えることができれば、それも歓迎すべきことです。

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 
+6

インデントはあなたにヒントを与える必要があります。始めに「試し始め」がありますが、どこでも '終わりの試着 'はありません。そして、もしあなたが 'tran'をやろうとすれば、' commit'はどこですか?いくつかのものをコピーして貼り付けたように見えますが、全体のチャンクはありません。 –

+0

あなたは正しいです、何らかの理由で、 "終わりの試行"はコピーしませんでした。しかし、あなたは私が「コミット」していないことについて正しいですか? – Lordson

答えて

-2
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 
+0

エラーが何であるかについて少し説明し、それを解決する方法は素晴らしいでしょう。 –

関連する問題