SQL Server的hstore相当于什么?

10
SQL Server中是否有与PostgreSQL的hstore等效的功能? 我正在运行SQL Server 2008,具有对数据库中稀疏键/值配对越来越多的需求。在我们的情况下,每次发生这种情况都创建一个新列是不可行的。目前,我们使用标准列并将所有这些“无模式”稀疏数据放入单个列中,然后在应用程序中运行键检查。这不太干净/优雅。
我最近开始处理另一个项目,该项目使用PostgreSQL并针对非常相似的问题使用hstore。 hstore是我们所遇到的问题的更清晰的解决方案,因此现在我想知道SQL Server 2008中是否有相应的功能?

SQL Server 中没有这样的函数。您可以创建一个名为 KeyValue 的表,其中包含两个列 (Key 和 Value)。当需要时,您可以连接到该表,并根据需要插入新行。 - TTeeple
这样做有点违背初衷。这只会创建一种情况,即需要多个连接才能获取单行数据的所有键。对于我们正在处理的键数来说,这将非常缓慢。目前,我们只需将键/值配对全部放入单个列中,并使用正则表达式匹配来获取所需内容。这样做还可以,但是 hstore 等效的方法最理想。另一个选择是添加一个无模式数据库来补充我们的关系型数据库中的此类数据,但这对我们当前的需求来说太重了。hstore 提供了两全其美的最佳解决方案 :( - bigtunacan
2
你可能会被困在存储JSON或XML的境地,并使用用户定义函数来提取键。不用说,这不会很快。你知道,在这里一个非常方便的选择是使用PostgreSQL...;-) - Craig Ringer
1
你说这样做会非常慢,但其实只是简单地连接一张表。假设键值是唯一的,对该列建立索引,你应该可以获得足够快的性能来完成你想要做的事情。我认为使用正则表达式/字符串匹配不会比B树操作更快。如果我错了,请告诉我。 - TTeeple
1
@TTeeple,如果情况是我正在寻找一个单一的键,我可以加入一次并将键/值作为我的行数据的一部分返回。我正在处理许多键,并且键的数量继续增长。要检索单个行中的所有数据将需要多个连接,每个键一个连接,即使使用索引也会很慢。使用单个连接将返回多行数据;这将创建一个更大的数据集,在我的情况下会减慢数据传递时间,无法映射到ORM,并且在我的客户端应用程序中处理速度较慢,因为它具有大量的JavaScript。 - bigtunacan
显示剩余3条评论
1个回答

1

MSSQL没有类似于“hstore”的内置函数,除非您想构建自己的函数来根据键返回值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接