【发布时间】:2012-04-18 09:00:17
【问题描述】:
我有一张设施表和一张传输表。我想计算各种信息,例如,设施 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,我了解到
- 循环遍历表的行是个坏主意What is the best way to loop over a table's rows?
- 最好使用存储过程进行此类计算,而不是将数据从服务器调用到客户端,计算值,然后将输出上传回服务器的缓存。
有没有一种方法可以更新每个设施的缓存,用于一堆日期范围,而无需 (1) 循环遍历 T-SQL 中的行(错误)或 (2) 循环遍历 VB 中的行。 net 从服务器下载值,然后再次上传(也不好)
【问题讨论】:
-
如果那是一个标量 UDF,您不能将 UDF 作为选择的一部分调用,以进行任何插入/更新吗?
-
它是一个标量 udf。设施名称是表中的一行。我使用该名称作为参数。我想做一些类似的事情,对于表更新缓存中的每个 fac 到 udf(fac)。但这似乎需要遍历行
-
您不需要为此循环。我在移动设备上很难做一个很好的例子,但这听起来就像一个 upsert(TSQL 中的
MERGE)并加入。