私はこれでとても新しいです。私はいくつかの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
インデントはあなたにヒントを与える必要があります。始めに「試し始め」がありますが、どこでも '終わりの試着 'はありません。そして、もしあなたが 'tran'をやろうとすれば、' commit'はどこですか?いくつかのものをコピーして貼り付けたように見えますが、全体のチャンクはありません。 –
あなたは正しいです、何らかの理由で、 "終わりの試行"はコピーしませんでした。しかし、あなたは私が「コミット」していないことについて正しいですか? – Lordson