gpt4 book ai didi

c# - 有没有办法在 SQL Server 2008 中进行查找序列化二进制对象的查询?

转载 作者:行者123 更新时间:2023-11-30 22:36:30 25 4
gpt4 key购买 nike

我有一个名为 Data 的对象,序列化为 varbinary(MAX)。数据对象包含名为 Source 的属性。有没有办法制作类似的东西:

select * from content_table where Data.Source == 'Feed'

我知道使用 XML 序列化 (XQuery) 时是可能的。但在这种情况下不能更改序列化类型。

最佳答案

如果您使用过 BinaryFormatter,那么不,不是真的 - 至少,不是没有反序列化整个对象模型,这在数据库中通常是不可能的。它是一种未记录的格式,几乎没有提供临时查询。

注意:BinaryFormatter 不是 (IMO) 任何与项目存储相关的好选择;我完全预料到这个在某个时候咬你一口(即无法可靠地反序列化你存储的数据)。痛点:

  • 与类型名称紧密相关;移动代码时可能会中断
  • 与字段名称紧密相关;重构类时可能会中断(即使只是创建一个自动实现的属性也是一个中断性更改)
  • 倾向于包含比您预期更大的图表,尤其是通过事件

当然,它也是特定于平台的,并且可能是特定于框架的。

说真的,这些年来我已经记不清有多少“我无法反序列化我的数据”问题...

有一些替代的二进制序列化器确实允许一些(有限的)能力通过阅读器检查数据(不需要完全反序列化),并且确实不绑定(bind)到类型元数据(相反,基于契约,允许反序列化为任何合适的类型模型 - 而不仅仅是特定类型/版本。

但是,我真的怀疑这样的工作是否可以在 WHERE 子句等中接近效率;您将需要一个 SQL/CLR 方法等。IMO,这里更好的方法是将所需的 filter 列作为数据存储在其他列中,允许您添加索引等。在极少数情况下,我使用了 xml 类型,这与我在 there 中所做的相同(有一个小警告,您可以使用底层的“提升”计算+存储+索引列xml 数据,这在这里是不可能的 - 额外的列必须是显式的)。

关于c# - 有没有办法在 SQL Server 2008 中进行查找序列化二进制对象的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6979153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com