如何替换 CLR 聚合函数以生成大于 8000 字节的 blob?
How to replade CLR aggregate function to produce blobs bigger than 8000 bytes?
我需要构建一个 blob 来捕获一系列 (datetime, float)
元组。它们是最初在 SQL table 中收集的带有类型列的采样传感器值。一段时间后,它们应该被转换为 blob 并存储在另一种记录中。需要时,应该将 blob 扩展回(比如临时的)table.
由于样本处理更复杂,原始 SQL 语言不适合 table 功能的实现。另一方面,我希望以灵活的方式实现CLR程序集。
至此,我实现了可以这样调用的聚合函数:
SELECT
MIN(UTC) AS min_utc,
MAX(UTC) AS max_utc,
Aggregates.TimeValuesBlob(UTC, sensor_value) AS result
FROM SensorData.dbo.sensor_values
WHERE UTC BETWEEN '2012-09-14 08:00' AND '2012-09-14 12:25'
但是,聚合函数最多可以 return 8000 字节。我需要构建更大的 blob。怎么做?应该使用什么 features/mechanisms 的 MS-SQL 服务器(版本 2012,可能还有 2008 R2)?
是否需要编写一个CLR存储过程并将SQL命令作为参数传递?是否可以使用与上面相同的 SQL 命令,在内部解析它,自己进行聚合?还是我应该重新考虑这种方法?
看看这个:SQL Server Compressed Rowset Sample 您可能想使用它,或者至少了解如何做这类事情。
我需要构建一个 blob 来捕获一系列 (datetime, float)
元组。它们是最初在 SQL table 中收集的带有类型列的采样传感器值。一段时间后,它们应该被转换为 blob 并存储在另一种记录中。需要时,应该将 blob 扩展回(比如临时的)table.
由于样本处理更复杂,原始 SQL 语言不适合 table 功能的实现。另一方面,我希望以灵活的方式实现CLR程序集。
至此,我实现了可以这样调用的聚合函数:
SELECT
MIN(UTC) AS min_utc,
MAX(UTC) AS max_utc,
Aggregates.TimeValuesBlob(UTC, sensor_value) AS result
FROM SensorData.dbo.sensor_values
WHERE UTC BETWEEN '2012-09-14 08:00' AND '2012-09-14 12:25'
但是,聚合函数最多可以 return 8000 字节。我需要构建更大的 blob。怎么做?应该使用什么 features/mechanisms 的 MS-SQL 服务器(版本 2012,可能还有 2008 R2)?
是否需要编写一个CLR存储过程并将SQL命令作为参数传递?是否可以使用与上面相同的 SQL 命令,在内部解析它,自己进行聚合?还是我应该重新考虑这种方法?
看看这个:SQL Server Compressed Rowset Sample 您可能想使用它,或者至少了解如何做这类事情。