小编Jer*_*ryK的帖子

UPDATE语句使用EXEC执行存储过程来设置列值

我几乎完成了将基于游标的存储过程更改为基于集合的过程.差不多,因为我只有一件事要弄明白.

它们使用一个调用的存储过程GetSequence来查询表,使用新的序列号(old + 1)更新它并返回新的序列号值.当他们使用游标时,这不是问题,因为他们将输出值分配给变量,然后使用变量.

我能想到保持新的存储过程集的唯一方法是GetSequence在INSERT或UPDATE语句中执行.但是,当我尝试这个时,我得到了奇怪的具体错误,"关键字'EXEC'附近的语法不正确".

这是旧代码:

  DECLARE @new_UD_campaignID BIGINT -- Get the new ud_lead_id for the new lead set
  EXEC ppGlobal.dbo.Getsequence
    'ud_campaign_id',
    @new_UD_campaignID OUTPUT
  DECLARE @OrderNum VARCHAR(9);
  IF @corpCamp LIKE '%LEP%'
    BEGIN
        SELECT @OrderNum = ( 'L' + RIGHT('00000000' + CAST(@new_UD_campaignID AS VARCHAR(8)), 8) )
    END
  ELSE
    BEGIN
        SELECT @OrderNum = ( 'C' + RIGHT('00000000' + CAST(@new_UD_campaignID AS VARCHAR(8)), 8) )
    END
Run Code Online (Sandbox Code Playgroud)

这可行,但实际上很慢,因为它在游标中并且更新了超过两百万行.

我正在尝试的新代码如下所示:

  UPDATE @List
  SET   OrderNumBigInt = EXEC (ipCore.dbo.Getsequence
                                     'ud_campaign_id',
                                     @new_UD_campaignID OUTPUT)
Run Code Online (Sandbox Code Playgroud)

我找不到任何特定的文档,表明您无法在SELECT或UPDATE语句中执行存储过程来设置列值.

有没有人尝试类似的东西,但成功了吗?

sql-server exec

7
推荐指数
1
解决办法
4万
查看次数

标签 统计

exec ×1

sql-server ×1