1

我正在存储源文件中的哪些行在 SQL 服务器数据库中执行。在我的查询中,我想确定两个文件的执行是否重叠;例如

线路运行1运行2
1 个
2个
3
4×

Run1 执行第 1 行和第 2 行,run2 第 2 行和第 4 行。我可以通过执行 (run1 & !run2) 看到第 1 行仅在 Run1 中执行。

如果我将运行存储为位掩码 (varbinary),我如何比较 SQL 查询中的运行?

create table runs columns filename varchar, runCoverage varbinary;
select filename, andNot(run, 1) from runs group by filename

这会将(选择的)运行与其他运行位字段进行比较。理想情况下,我想 OR 记录组的位域(来自一个组件的线路覆盖数据),然后 AND NOT 与另一组记录。我可以计算结果中的 1 位,这将是一组测试中覆盖的行数,而不是另一组测试中的行数......

4

1 回答 1

0

如果行数不是太多,您可以简单地将 varbinary 转换为 bigint 以进行按位比较以获取执行第 1 行的所有文件:

where (cast(runCoverage as bigint) & 1) > 0

或执行第 1 行旁边任何行的所有文件

where (cast(runCoverage as bigint) & ~1) > 0

如果行数较多,可以使用 substr 生成一些辅助函数来获取正确的位。再说一次,也许我完全误解了这个问题。

于 2012-06-02T07:50:27.010 回答