вставить в select - хранимая процедура влияет на 0 строк - PullRequest
0 голосов
/ 03 апреля 2020

Я использую SQL Server 2014. Я создал хранимую процедуру для обновления таблицы, но когда я ее запускаю, это влияет на 0 строк. я ожидаю увидеть затронутые 501 строки, так как фактический оператор вставки, когда выполняется один, возвращает это. Обновляемая таблица предварительно заполнена.

Я также попытался предварительно заполнить таблицу 500 записями, чтобы посмотреть, была ли сохранена последняя 1 строка хранимой процедурой, но это все равно влияет на 0 строк.

Create PROCEDURE UPDATE_STAGING 
    (@StatementType NVARCHAR(20) = '')  
   AS  
      BEGIN  
        IF @StatementType = 'Insertnew'  
            BEGIN  
                INSERT INTO owner.dbo.MVR_Staging  
                  (
                    policy_number, 
                    quote_number,
                    request_id,
                    CreateTs,
                    mvr_response_raw_data
                 )  
               select 
                  p.pol_num, 
                  A.pol_number,
                  R.Request_ID, 
                  R.CreateTS, 
                  R._raw_data
               from TABLE1 A with (NOLOCK)
               left join TABLE2 R with  (NOLOCK)
                 on R.Request_id = isnull(A.CACHE_REQUEST_ID, A.Request_id)
               inner join TABLE3 P
                 on p.quote_policy_num = a.policy_number
               where  
                 A.[SOURCE] = 'MVR'
                 and A.CREATED_ON >= '2020-01-01'
      END  
    IF @StatementType = 'Select'  
         BEGIN  
           SELECT *  
         FROM   owner.dbo.MVR_Staging  
     END  
END

для запуска:

exec  UPDATE_STAGING insertnew
GO

1 Ответ

0 голосов
/ 03 апреля 2020

Некоторые исправления в вашем коде, которые не связаны с вашей проблемой, но полезны для сохранения передового опыта и очистки кода. Когда объявляется параметр stored procedure, нет смысла использовать скобки (@StatementType NVARCHAR(20) = ''). Также вы должны использовать ELSE IF @StatementType = 'Select', без ELSE, это второе IF условие всегда будет проверяться. Выполните процедуру exec UPDATE_STAGING 'insertnew', так как параметр NVARCHAR. Что касается вашей реальной проблемы, вы можете попробовать прокомментировать часть INSERT и оставить только SELECT, чтобы увидеть, возвращаются ли строки.

...