如何在不更新数据表的情况下查看过程执行的结果?

时间:2019-03-26 13:34:50

标签: sql sql-server stored-procedures sql-server-2016

我存储的过程里面有$UPDATE。我想查看执行此过程而不在表中进行更改的结果。

我正在考虑PRINT和RAISERROR,但是我没有找到正确的方法-我需要修改我的过程,还是可以专门执行我的过程。

我的一些过程代码:

...
UPDATE Table SET DateChange = @DateCh

程序执行

GO
DECLARE @UF int
EXECUTE @UF = [dbo].[sp_GoProc] 
GO

在输出中,我希望在表或表中已更新的部分中看到更新的值。

2 个答案:

答案 0 :(得分:1)

如果可以接受更改过程,则可以将任何UPDATE修改为SELECT,以查看将要更新的内容。例如,更改此:

UPDATE mt
SET x=1
FROM MyTable mt
JOIN OtherTable ot ON mt.y=ot.y
WHERE SomeCondition='true'

对此:

SELECT * 
FROM MyTable mt
JOIN OtherTable ot ON mt.y=ot.y
WHERE SomeCondition='true'

话虽如此,您真正要的不是一个好习惯。测试执行更新的过程的最佳实践是制作数据库的测试副本,然后在测试副本上运行该过程。然后,您可以在测试副本中查看UPDATE的实际结果,并且您的真实数据不会受到影响。

答案 1 :(得分:1)

由于这是出于测试目的,请在您的存储过程中尝试

Begin tran
UPDATE Table SET DateChange = @DateCh
Select * from Table where DateChange = @DateCh
Rollback

OR

您可以保持存储的proc不变,并将执行包装在事务块中

Begin tran

DECLARE @RC int
EXECUTE @RC = [dbo].[sp_GoProc] 

Select * from Table

Rollback

在执行存储的proc时,您将看到Table的输出带有更改,但是在两种情况下它们都会回滚。