我需要计算一堆每行值:如何避免循环遍历t-sql中的表行

时间:2012-04-13 20:00:45

标签: .net tsql

我有一张设施表和一张传输表。我想计算各种各样的东西,例如,设施X在2011年4月发送了10124321409传输,其中9959个缺少SSN。这些是巨大的表,因此我将这些计算值存储在“缓存”表中,以便当用户使用UI查看我们的系统时(例如选择日期范围),可以轻松访问它们。我有一堆用户定义的函数,它们使用工具名称和日期范围并计算一个值,比如

 set @s = dbo.getPctMissingSSNs(facilityX, 1/1/2012, 1/15/2012) //returns pct missing ssn from 1/1/12 to 1/15/12 at facilityX

从stackoverflow,我已经学会了

  1. 循环表的行What is the best way to loop over a table's rows?
  2. 是个坏主意
  3. 最好使用存储过程进行这些类型的计算,而不是将数据从服务器调用到客户端,计算值,然后将输出上传回服务器的缓存。
  4. 有没有办法可以为每个设施更新缓存,对于一堆日期范围,没有(1)在T-SQL中循环遍历(坏)或(2)在VB中循环遍历行。 net从服务器下载值然后再次上传(也很糟糕)

1 个答案:

答案 0 :(得分:1)

使用更新查询。 T-SQL将该字段的名称解释为输入参数。因此,如果您有一个包含两列的表:facilityName和cacheValue字段,您可以执行类似这样的操作来更新cacheValue字段,使其等于scalarUserDefinedFunction(facilityName)

Update cacheTable set cacheValue=scalarUserDefinedFunction(cacheTable.FacilityName)