【问题标题】:insert into select - stored procedure affects 0 rows插入选择 - 存储过程影响 0 行
【发布时间】:2020-07-15 16:29:30
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: select stored-procedures insert


    【解决方案1】:

    对与您的问题无关的代码进行一些更正,但有助于保持最佳实践和干净的代码。声明stored procedure 参数时,使用括号(@StatementType NVARCHAR(20) = '') 没有意义。此外,您应该使用ELSE IF @StatementType = 'Select',而不使用ELSE,将始终检查第二个IF 条件。执行过程exec UPDATE_STAGING 'insertnew',参数为NVARCHAR。至于您真正的问题,您可以尝试评论INSERT 部分并仅留下SELECT 以查看是否返回了行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 2014-02-19
      相关资源
      最近更新 更多