Как посмотреть результат выполнения процедуры без обновления таблиц данных? - PullRequest
0 голосов
/ 26 марта 2019

У меня есть хранимая процедура с $UPDATE внутри.Я хочу увидеть результат выполнения этой процедуры без внесения изменений в мои таблицы.

Я думаю о PRINT и RAISERROR, но я не нашел, как это сделать правильно - нужно ли мне изменить мою процедуру, или я могу специально выполнить свою процедуру.

Часть моего кода процедуры:

...
UPDATE Table SET DateChange = @DateCh

Выполнение процедуры

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

В выводе я ожидаю увидеть обновленные значения в таблицах или части таблицы, которая была обновлена.

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Так как это для целей тестирования, попробуйте это в вашей сохраненной процедуре

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

OR

Вы можете сохранить свой сохраненный процесс неизмененным и обернуть выполнение в блок транзакции

Begin tran

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

Select * from Table

Rollback

Вы увидите выходные данные Table с изменениями при выполнении вашего сохраненного процесса, но в обоих случаях они будут отменены.

1 голос
/ 26 марта 2019

Если изменение процедуры приемлемо, вы можете изменить любое ОБНОВЛЕНИЕ в ВЫБОР, чтобы увидеть, что будет обновлено. Например, измените это:

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'

Как говорится, то, что вы просите, на самом деле не является хорошей практикой. Лучшая практика для тестирования процедуры, которая выполняет обновления, - это сделать тестовую копию вашей базы данных и запустить процедуру на тестовой копии. Затем вы можете посмотреть фактические результаты ОБНОВЛЕНИЯ в тестовой копии, и ваши реальные данные не будут затронуты.

...