由於我討厭要求具體的解決方案,這裏是我的問題的背景,以防萬一我以錯誤的方式接近它。如果您想跳過背景並正確回答問題,請跳至粗體行。我正在創建一個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. –