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 和存储过程的新手,如果这真的很基本,我很抱歉。我必须在几天内做一些比这更复杂的事情。这可能吗?另外,如果有许多字段而不仅仅是一个字段,我怎么知道要更新哪个字段,是否有一种“简单”的方法可以做到这一点?

注意:我知道这一点->

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

错了,我只是想让你了解我想要完成的事情。

我在这里要做的是,在更新之前验证记录是否已被修改。这就是我打算使用“find_ubicacion”的目的,找到旧的,将其与输入参数进行比较,然后更新与否

就像我说的,如果这是一个愚蠢的问题或非常基本的问题,我很抱歉,我正在尝试自己学习。预先感谢您的任何帮助。

4

1 回答 1

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 回答