使用 varbinary 右侧运算符的 TSQL vbinary 位掩码

发布于 2024-12-28 13:28:28 字数 852 浏览 1 评论 0原文

我正在寻找一些提示或技巧来应对我面临的这个设计挑战:

我需要对数据库中存储的两个相同大小的 varbinary 字段进行位屏蔽。只是为了澄清,不,这不是“权限表”或任何东西。我会标准化这些类型的项目的数据库,但这些数据无法标准化。我正在存储一个 varbinary 字段,用于动态存储我们的应用程序生成的位。我还在使用另一个 varbinary 查询来搜索这些位。在 .net 中,我使用 BigInteger 类型来处理所有位掩码,它做得很好,但是我正在考虑将此过程卸载到数据库服务器,以在将结果传回调用者之前过滤结果。现在,我最多支持 varbinary(512) 字段类型,并且希望同时执行 AND 和 OR 运算符,并且能够比较右侧运算符中的任何(OR)或全部(AND)位是否成功通过。 MSDN 说您可以将 varbinary() 与右侧运算符 max bigint 一起使用,但我需要超越这个范围。

我发现的一个很好的资源是 Adam Machanic 关于此主题的博客文章,但在深入研究之前,我想看看是否还有其他方法。

http://sqlblog .com/blogs/adam_machanic/archive/2006/07/12/bitmask-handling-part-3-logic-operators.aspx

这适用于 SQL 2005 年或更高。如果 2008 年有一个 2005 年没有的函数,我会接受,只是我还无法识别它。

任何提示或技巧将不胜感激。

谢谢。

特拉维斯·惠登

I am looking for some hints or tricks for this design challenge I am up against:

I have a need to bitmask two of the same size varbinary fields stored in the database. Just to clarify, no this is not a "permissions table" or anything. I would normalize the database for those kinds of items and this data cannot be normalized. I am storing a varbinary field for a dynamic storage of bits that our application generates. I am also searching against these bits with another varbinary query. In .net, I use a BigInteger type to handle all of the bitmasking and it does a great job however I am thinking about offloading this process to the database server to filter the results before passing it back the caller. Right now, I support up to a varbinary(512) field type and will want to do both AND and OR operators and be able to compare if ANY (OR) or ALL (AND) of the bits in the right hand side operator made it through. MSDN says that you can use a varbinary() with a right hand side operator max bigint, however I need to exceed that.

A nice resource I have found is Adam Machanic's blog posting on this topic but looking to see if there are other approaches before I dig into it.

http://sqlblog.com/blogs/adam_machanic/archive/2006/07/12/bitmask-handling-part-3-logical-operators.aspx

This would be for SQL 2005 or higher. If 2008 has an function not found in 2005, I would be fine with that, I just have not been able to identify one yet.

Any hints or tricks are greatly appreciated.

Thanks.

Travis Whidden

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只为守护你 2025-01-04 13:28:28

如果您知道位图的最大长度,您可以将其分布在多个列上并单独屏蔽它们。

但它很快就会变得混乱。

If you know the max length of the bitmap, you COULD spread it over multiple columns and mask them individually.

It gets messy real fast though.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文