-1

変更されたテーブルの行のみを更新するストアドプロシージャを作成しました

SQLSERVER coalesce関数を使用しました。

CREATE PROCEDURE update_only_changed

            @FName varchar(50) = NULL,

            @LName varchar(50) = NULL,

            @CUST_DB VARCHAR(20) 

AS

BEGIN

            DECLARE @QUERY VARCHAR(255)

            SET @QUERY = 'UPDATE ' + @CUST_DB + '..people SET LastName = COALESCE(@LName, LastName) WHERE id = 1'

            EXEC (@QUERY)

END

GO

いくつかの考慮事項

  • 動的SQLです

  • データベースの名前は、プロシージャのパラメータとして渡されます

したがって、SQLを実行すると、次の2つの状況が発生します。

  • EXEC(@ QUERY)

    I get the error saying: Must declare the scalar variable "@ LName".
    it does not interpret the variable that the command coalesce
    
  • EXEC @QUERY (without parentheses)

     I get the error saying: The database 'UPDATE CUSTOMER' does not exist. Make sure the name is spelled correctly.
    

どうすればそれを機能させることができますか?

プロシージャを静的な更新ステートメントを使用して実行し、EXECを使用しない場合は、機能することを忘れないでください。

UPDATE CUSTOMER..people SET LastName = COALESCE(@LName, LastName) WHERE id = 1
4

1 に答える 1

0

execのコンテキストに変数@Lnameがないため、最初の変数は機能しません。これは、プロシージャのスコープにのみ存在します。sp_executesqlexecの代わりにを使用してクエリのスコープに渡す必要があります

exec sp_executesql @query, N'@LName varchar(50)', @Lname

しかし

このようなことはお勧めしません。

于 2012-07-26T13:53:44.840 に答える