更新表中的每一行

tv8*_*v87 5 sql t-sql sql-server function

我有一个包含一些值列,公式和结果列的表.

|rownum|value1|value2|value3|formula             |result|
|------|------|------|------|--------------------|------|
|1     |11    |30    |8     |value1/value2*value3|      |
|2     |43    |0     |93    |value1-value2+value3|      |
Run Code Online (Sandbox Code Playgroud)

我想result用公式的结果填充列.

目前我正在使用此查询:

DECLARE @v_sql NVARCHAR(MAX) 

SET @v_Sql = CAST ((SELECT
           ' UPDATE [table] ' +
            ' SET [result] = ' + table.[formula] +
            ' WHERE [rownum] = ' + CAST(table.[rownum] as nvarchar(255)) +
            ';'
          FROM [table]
          FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') AS NVARCHAR (MAX))

EXEC (@v_Sql)
Run Code Online (Sandbox Code Playgroud)

问题是这需要很长时间.表中的#行将为5到1000万.

有什么方法可以加快速度吗?解决这个问题的替代方法?

非常感谢!

clo*_*afe 2

按公式类型进行批量更新是否更快?[公式] 还需要索引:

DECLARE @v_sql NVARCHAR(MAX) 

SET @v_Sql = CAST ((SELECT
           ' UPDATE [table] ' +
            ' SET [result] = ' + [table].[formula] +
            ' WHERE [formula] = ''' + [table].[formula] + ''';'
          FROM [table]
          group by [table].[formula]
          FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') AS NVARCHAR (MAX))
exec(@v_Sql)
Run Code Online (Sandbox Code Playgroud)