Sql server 我可以在SQLServer2005中创建xml数据的动态视图吗?

Sql server 我可以在SQLServer2005中创建xml数据的动态视图吗?,sql-server,xml,dynamic-sql,Sql Server,Xml,Dynamic Sql,在这种情况下,我们需要在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: l

在这种情况下,我们需要在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)
最初,我们设置了单独的表来存储这些数据,这些数据完全符合所讨论的表单。但这会导致维护噩梦,因为每次都有如此多的表、进程、dts和ssis包需要更改,以适应此数据的动态特性

我们提出了一种不同的解决方案,将所有数据存储在xml字段中,从而解决了大部分问题。它现在的存在与此类似

<Record>
  <first_name>value</first_name>
  <last_name>value</last_name>
</Record>
现在这比以前好多了,但这也意味着我们每次仍然需要创建自定义视图。我更愿意维护某种类型的表,列出字段并为我构建查询

Field Name | Field Type | Field Length
first_name | varchar    | 20
last_name  | varchar    | 30

我很确定我无法创建动态视图。一个可行的选项是表值函数。但这里有什么东西是我忽略的吗?是否有更好的选项能够以这种方式动态存储数据而不离开SQL SERVER,因为我知道其他数据库(如CouchDB)将以本机方式进行存储。

我很确定表值函数无法工作,因为您不能使用动态sql或temp表,所以您几乎肯定需要使用它们来实现这一点

存储过程是一个明显的选择——它可以做您需要做的所有事情,但问题当然是您不能从存储过程中进行选择

我在看这本书,它讨论了一系列做这类事情的选项。他提到的一个选项是使用OPENQUERY,这似乎非常简单,但可能存在性能问题:

SELECT * FROM OPENQUERY(LOCALSERVER, 'EXEC sp_getformdata')

无论如何,您可能希望查看该链接以获得一些其他想法。

什么意思,不能从存储过程中选择?为什么不让SP返回结果集呢?好吧,您将无法从SP_getformdata中选择first_name,last_name-这实际上是我们需要做的,因为此过程的下一部分将获取拆分数据,并以多种方式对其进行格式化,例如选择first_name+,+来自sp_GetFormDatas的姓氏感谢您提供的信息,我之前已经阅读了该链接。这些选项中的每一个似乎都有某种类型的惩罚,当我们处理数十万条记录时,我无法承受性能上的打击。
SELECT * FROM OPENQUERY(LOCALSERVER, 'EXEC sp_getformdata')