0

データベースで更新するために、別のストアド プロシージャ内のストアド プロシージャからの結果セットを使用して、レコードが異なるかどうか (編集されているかどうか) を知ることができるかどうか疑問に思っていました。

私は次のようなことを考えていました:

CREATE PROCEDURE [SISACT].[find_ubicacion] 
@ubicacion_to VARCHAR(8)
AS
SELECT ubicacion, descripcion FROM UBICACIONES WHERE ubicacion = @ubicacion_to

そしてそれを呼ぶ人

CREATE PROCEDURE [SISACT].[update_ubicacion]
@ubicacion VARCHAR(8),
@old_descripcion VARCHAR(60),
@new_descripcion VARCHAR(60)
AS
BEGIN
@old_descripcion = EXEC [SISACT].[find_ubicacion] (@ubicacion)
PRINT @old_descripcion
IF @old_descripcion != @new_descripcion
UPDATE [SISACT].[UBICACIONES] SET descripcion=@new_descripcion WHERE
ubicacion=@ubicacion
ELSE
PRINT 'Nothing to update'
END

例外EXEC [SISACT].[find_ubicacion] (@ubicacion)は機能しません。SQL SERVER とストアド プロシージャは初めてです。これが本当に基本的なことでしたら申し訳ありません。数日でこれよりも複雑なことをしなければなりません。これは可能ですか?また、1つだけでなく多くのフィールドがある場合、どのフィールドを更新するかをどのように知ることができますか?これを行う「簡単な」方法はありますか?

注: 私はこれを知っています ->

@old_descripcion = EXEC [SISACT].[find_ubicacion] (@ubicacion)
    PRINT @old_descripcion
    IF @old_descripcion != @new_descripcion

間違っています。私が達成しようとしていることを理解してもらいたかっただけです。

ここでやろうとしているのは、更新する前にレコードが変更されたかどうかを確認することです。それが私が「find_ubicacion」を使用して古いものを見つけ、それを入力パラメーターと比較してから更新するかどうかを意図していることです

私が言ったように、これが愚かな質問または本当に基本的なものである場合は申し訳ありません.私は自分で学ぼうとしています. よろしくお願いします。

4

1 に答える 1

1

2 つのストアド プロシージャが必要な理由がわかりません。これは1つのクエリで実行できます

UPDATE [SISACT].[UBICACIONES] 
SET descripcion = @new_descripcion 
WHERE ubicacion = @ubicacion
AND descripcion <> @new_descripcion 

更新: ストアド プロシージャが本当に必要な場合。このようなものになるはずです(未テスト)

CREATE PROCEDURE [SISACT].[update_ubicacion]
    @ubicacion VARCHAR(8),
    @new_descripcion VARCHAR(60)
AS
BEGIN
  SET NOCOUNT ON

  UPDATE [SISACT].[UBICACIONES] 
  SET descripcion = @new_descripcion 
  WHERE ubicacion = @ubicacion
  AND descripcion <> @new_descripcion 

  IF @@ROWCOUNT = 0
     PRINT 'Nothing to update'     
END
于 2013-03-14T01:52:05.397 に答える