我们有一种情况,我们需要在我们的 sql server 中存储表单数据,但是我们设置的每个新作业都会有不同的字段,具有不同的字段名称和长度。一个例子
Job 1:
Field 1: first_name - varchar(20)
Field 2: last_name - varchar(30)
Job 2:
Field 1: first_name - varchar(15)
Field 2: middle_initial - varchar(1)
Field 3: last_name - varchar(30)
最初,我们设置了单独的表来存储这些数据,这些数据完全符合所讨论的形式。但这导致了维护的噩梦,因为有太多的表、procs、dts、ssis 包每次都要更改,以适应这些数据的动态特性。
我们提出了一种不同的解决方案,将所有数据存储在 xml 字段中,从而解决了大部分问题。它现在与此类似。
<Record>
<first_name>value</first_name>
<last_name>value</last_name>
</Record>
然后我们将创建视图以将这些数据从表中提取出来
SELECT
, IsNull(data.value('(/Record/first_name)[1]', 'varchar(20)'),'') as first_name
, IsNull(data.value('(/Record/last_name)[1]', 'varchar(30)'),'') as last_name
FROM FormTable
现在这比我们以前的要好得多,但这也意味着我们仍然需要每次都创建自定义视图。我更愿意维护某种类型的表来列出字段并为我构建该查询。
Field Name | Field Type | Field Length
first_name | varchar | 20
last_name | varchar | 30
我很确定我无法创建动态视图。一个可行的选择是表值函数。但是有什么我在这里忽略的吗?是否有更好的选择能够以这种方式动态存储数据(无需离开 SQL SERVER,因为我知道 CouchDB 等其他数据库会在本地执行此操作。)