【问题标题】:Update on table by executing a T-SQL procedure通过执行 T-SQL 过程更新表
【发布时间】:2019-07-05 14:53:23
【问题描述】:

我需要通过过程中的数据更新每个空行中的列。

问题是我需要为每条记录设置一个唯一值。过程返回它,但我不知道如何实现它。

到目前为止,我得到的结果在每一行中都是相同的 - 请记住,当我执行过程时,它会检查表中的现有值并给我唯一的值。如何通过此过程每次更新其他值?

declare @ean varchar(40)

exec dbo.generateEAN 1, '', @ean output

update t 
set Twr_Ean = @ean 
from dbo.table t  
where t.Code = ''

【问题讨论】:

  • 为什么需要 SP? SP代码是什么? "Empty" 是什么意思,是指 '' 还是 NULL?请提供 SP 代码。
  • 你能分享generateEAN代码吗?如果可以对其进行重构以返回 EAN 表,则可以创建用于更新表的相当简单的脚本。否则最后一个资源是一个循环。
  • 我不完全确定这是真的,但听起来你想将你的函数应用于表中的每一行,对我来说这听起来像是研究CROSS APPLY 的理由。

标签: sql sql-server tsql procedure


【解决方案1】:

试试标量函数?可能比内联更新语句的存储过程更容易。这是一个简单的sn-p。但是在处理大型数据集时性能会下降。您可能需要重新考虑如何处理您的问题。

创建函数 dbo.ufn_mypower (@x int)
返回 int 并作为调用者执行 作为
开始返回电源(@x,2)
结束

用函数创建表更新 ( originalvalue int null
,calculatedvalue int null )

插入更新函数(原始值) 价值观 (1), (2), (3), (4), (5), (6)

用函数更新更新 设置计算值 = dbo.ufn_mypower(原始值)
其中计算值为 null 且 originalvalue >= 4

select *from updatewithfunction

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    相关资源
    最近更新 更多