我目前正在研究F#中的一个项目,该项目从Excel电子表格中获取数据,确定它是否与SQL Server中的现有表兼容,然后将相关行添加到现有表中。
我使用的一些数据比T-SQL提供的类型更具体。也就是说,T-SQL有一个类型“日期”,但我需要区分每个月初或每个月末的日期集。同样的逻辑也适用于许多其他类型。如果我有类型:
Date(Beginning)
Date(End)
在添加到表之前,它们都将被转换为T-SQL类型“date”,因此删除了一些更具体的信息。
为了解决这个问题,我保留了F#中序列化类型的日志,以及它们适用的SQL Server表中的列号。我的问题是:有没有办法在SQL Server内部的某处存储此日志,以便我可以访问它并将输入数据的序列化类型与表中已存在的数据的序列化类型进行比较,然后再进行新的插入?
答案 0 :(得分:1)
将元数据保存在数据库之外并手动维护它们会使您的数据库价格昂贵而且价格昂贵。管理加上会增加错误的风险,在发生不良事件之前,您甚至可能检测不到。
如果您可以控制表模式,则至少有几个简单的选项。例如,您可以添加存储类型信息的列。对于简单的事情,只需要描述几个可能的值,只需添加一个新列来存储实际的类型值。更新F#代码以将源反序列化为单独的DATE并键入(BEGINNING / END)值,然后将这些值插入表中。简单,易于维护和易于消费。
您还可以为每个日期子类型创建用户定义的类型,但这可能会让另一个DBA / dev加入混乱,从而使从应用程序中检索数据时更加复杂。这通常不是一个好方法。
答案 1 :(得分:0)
是的,如果你愿意,你可以这样做。