9

SQL Serverでこれを行う方法がわからないという点で、これには少し問題があります。

基本的に、データベースに新しい行を挿入し、挿入されたばかりの PK 値を取得し (同じクエリ)、それをストアド プロシージャと呼ばれるものに出力します。

CREATE PROCEDURE Users_Insert
    -- Add the parameters for the stored procedure here
    @userid int output,
    @name varchar(50),
    @surname varchar(50),
    @email varchar(200),
    @password varchar(50),
    @location varchar(50)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    insert into Users(FirstName, LastName, Email, Password, Location)
    values(@name, @surname, @email, @password, @location);
    GO
    @userid = @@IDENTITY;
END

次のようにMySQLでこれを行いました:

CREATE PROCEDURE Users_Insert(@userid int output, @name varchar(50), @surname varchar(50), @email varchar(200), @password varchar(50), @location varchar(50)
BEGIN

    insert into Users(FirstName, LastName, Email, Password, Location)
    values(@name, @surname, @email, @password, @location);

    set @userid = last_insert_id();
END

SQL Server で次のエラーが表示されます。

メッセージ 102、レベル 15、状態 1、手順 Users_Insert、行 18
'@userid' 付近の構文が正しくありません。

率直に言って、出力パラメーターを正しく宣言したかどうかわかりません。誰か提案を提供できますか?

4

1 に答える 1

14

値を!に割り当てる必要があります。@useridまた、次のものを使用することをお勧めしSCOPE_IDENTITY()ます@@IDENTITY

CREATE PROCEDURE Users_Insert
    -- Add the parameters for the stored procedure here
    @userid int output,
    @name varchar(50),
    @surname varchar(50),
    @email varchar(200),
    @password varchar(50),
    @location varchar(50)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    insert into Users(FirstName, LastName, Email, Password, Location)
    values(@name, @surname, @email, @password, @location);

    -- make an actual **assignment** here...
    SELECT @userid = SCOPE_IDENTITY();
END

overを使用するSCOPE_IDENTITY理由については、このブログ投稿を参照してください。@@IDENTITY

于 2013-05-10T12:11:41.933 に答える