Sql server 在SQL表中存储键值对,然后更新和检索 在我的应用程序中,我遇到了一个数据库设计,我需要考虑以下几点: 用户将根据关键字输入一些值,我想将其存储为数据库表中的键值对-表将具有列名key和value。 用户可以在以后更新同一个键及其值。一旦我保存了同一个键,就很难更新它,因为我必须找出修改了哪个键。

Sql server 在SQL表中存储键值对,然后更新和检索 在我的应用程序中,我遇到了一个数据库设计,我需要考虑以下几点: 用户将根据关键字输入一些值,我想将其存储为数据库表中的键值对-表将具有列名key和value。 用户可以在以后更新同一个键及其值。一旦我保存了同一个键,就很难更新它,因为我必须找出修改了哪个键。,sql-server,database,Sql Server,Database,请帮助我在数据库中保存键值对的任何其他方法。在以后的更新中,可以跟踪密钥名及其值,以便我可以更新相同的密钥名 例如: 已定义模板。在此模板中,存在一些未知属性,客户端应更新这些属性以执行该模板 假设一个属性是Path。此处路径应替换为实际路径 因此,我们必须从模板中找出所有这些属性,并在UI中显示为table key->Path,Value->[Empty Textbox]。用户可以在此路径上输入一个值。我们必须保存它以备将来使用,因为用户可以重新触发它 但在重新触发之前,他可以将密钥从Path

请帮助我在数据库中保存键值对的任何其他方法。在以后的更新中,可以跟踪密钥名及其值,以便我可以更新相同的密钥名

例如:

已定义模板。在此模板中,存在一些未知属性,客户端应更新这些属性以执行该模板

假设一个属性是Path。此处路径应替换为实际路径

因此,我们必须从模板中找出所有这些属性,并在UI中显示为table key->Path,Value->[Empty Textbox]。用户可以在此路径上输入一个值。我们必须保存它以备将来使用,因为用户可以重新触发它


但在重新触发之前,他可以将密钥从Path更改为ActualPath。在这种情况下,我需要找出实际路径是路径的更新名称,这对我来说相当困难。

它期待着我;我的意思是我真的不明白你到底有什么问题。你回答了你自己的问题

创建一个如下所示的表:

KVPTable
    Key, VARCHAR(whatever), PrimaryKey
    Value, VARCHAR(whatever)
由于密钥是主键,因此不允许重复条目。您可以对键执行UPDATE语句来更新任何或两个字段

UPDATE KVPTable SET Key = 'newKey' WHERE Key = 'oldKey'
UPDATE KVPTable SET Key = 'newKey', Value = 'newValue' WHERE Key = 'oldKey'
UPDATE KVPTable SET Value = 'newValue' WHERE Key = 'key'

这将确保只更新一条记录。在调用语句之前,您可以执行另一个SELECT语句来检查新键是否已经存在。即使您不检查它,也会抛出您应该捕获的异常。

为什么不使用标识主键列来标识记录?您是否可以添加一个额外的栏位?如果关键是价格,您销售的回形针和劳斯莱斯的价格如何不同?就其本身而言,键/值是不够的。@DMayuri有针对一个模板的设置键和值。模板Id将与多对一关系的模板表匹配。如果每个密钥都有一个id,我如何识别用户修改了哪个密钥名,因为很难跟踪每个密钥值的每个PK。@JonathanLeffler说密钥名是Price。将来,用户有权在模板中将关键字名称从价格更改为市场价格。仅从模板检索键,然后在UI中显示它,然后将其值保存到DB。后来,如果密钥名称发生了更改,那么我必须更新数据库中的密钥名称。您没有向我显示足够的大纲模式和示例值,我无法理解您在做什么,那么。特别是,目前还不清楚键/值对与它们所描述的内容相关的存储方式。在这里很难跟踪旧键和新键的匹配。您是否有设置数量的键/值对,或者是否无限期地填充表?您是否会重复使用新旧密钥等?@GrammatonCleric我没有设置数量的密钥/值对。我在运行时填充它们,并在UI中将其显示为一个表。