由于我讨厌要求具体的解决方案,这里是我的问题的背景,以防万一我以错误的方式接近它。如果您想跳过背景并正确回答问题,请跳至粗体行。我正在创建一个PDF格式的表单,该格式将预填充来自SQL数据库的数据。为了做到这一点,我需要将数据库中的数据导出到XFDF文件中,然后我可以轻松地将其与空白PDF表单合并以填充值。如何将具有多列的行转换为具有两列(字段名和值)和多行的表?
的XFDF文件的格式如下:
<fields>
<field name="FirstName">
<value>John</value>
</field>
<field name="LastName">
<value>Smith</value>
</field>
</fields>
其中“名字”和“姓氏”对应PDF表单上的字段的名称,而“约翰”和“史密斯”是从相应的值数据库来填充表单。
所以我的目标是创建XFDF文件,并使PDF上的字段名称与表格中列的名称相对应。我目前的做法是使用SELECT FOR XML EXPLICIT语句。为了使用它,我首先需要将数据选择为xml显式语句所需的“通用表格”格式,其中原始数据表格中的每列都有单独的行。我可以手动完成对每个字段,写一个单独的SELECT语句为每列 - 因此,例如,名字列部分看起来是这样的:
SELECT 2 AS Tag,
1 AS Parent,
null AS [fields!1],
FirstName AS [fields!2!name],
D.FirstName AS [value!3!]
From Data AS D
(我不知道这正是对选择正确的语法对于XML语句,但它应该是这样的)
如果我为我的原始表中的每个列做了select语句(加上一个用于根级别“fields”元素,然后将它们联合在一起,它应该创建我需要的表然后执行SELECT FOR XML EXPLICIT语句。
但是,有一个这种形式的领域(政府机构! Yeesh!),我更喜欢某种方式来编程。
所以,现在我已经给出了背景,这是我的实际问题。如果您阅读背景并认为我的方法很糟糕,请告诉我。
我需要一种方法来服用含有一排像这样的表:
+-----------+----------+-----+ | FirstName | LastName | Etc | +-----------+----------+-----+ | John | Smith | 123 | +-----------+----------+-----+
,并从它建立一个新的表看起来像这样:
+-----------+-------+ | FieldName | Value | +-----------+-------+ | FirstName | John | | LastName | Smith | | Etc | 123 | +-----------+-------+
如果这是有效的,我会这样做:
SELECT 2 AS Tag,
1 AS Parent,
null AS [fields!1],
C.column_name AS [fields!2!name],
D.{C.column_name} AS [value!3!]
From Data AS D, information_schema.columns AS C
WHERE C.table_name = 'Data'
显然这是不可能的,你不能让col被选中的变量。我看了这个问题(Use variable Column name in Select statement on SQL server 2008),最好的答案可能是有希望的,但它以“但它非常可怕,恕我直言。”结束。在踏上这条道路之前,我想研究一些不太“可怕”的解决方案。有什么建议么?
SQL服务器,MySQL或其他? –
MS SQL Server 2008. –