2009-04-28 84 views
1

通過用BCP調用proc用作追加聲明XML文件

SET @SQL= 'bcp "exec dbo.proc" queryout '+ @FileName +' -w -r -t -Sdd\SQL2005 -T ' 

創建XML列於數據庫的數據(下面產生PROC) 一切都很好=>根據需要創建XML。 現在的任務就是聲明添加到這個XML(<?xml version="1.0" ?>

怎麼可以這樣無論是在下面PROC或concating XML與其他文件(包含聲明)來實現

SELECT (SELECT TOP 1 
        ShiftDate AS "ShiftDate", 
        Shift AS "Shift" 
      FROM  [TableName] 
     FOR 
      XML PATH(''), 
       TYPE 
     ), 
     (SELECT EquipmentId AS "WasheryProductionDetails/EquipmentCode", 
        'n/a' AS "WasheryProductionDetails/ActivityCode", 
        'n/a' AS "WasheryProductionDetails/ReasonCode", 
        Parentmaterial AS "WasheryProductionDetails/WasheryFeed/MaterialCode", 
        ParentStockpile AS "WasheryProductionDetails/WasheryFeed/ROMStockpileCode", 
        CAST(ParentTonnes AS DECIMAL(18, 4)) AS "WasheryProductionDetails/WasheryFeed/FeedTonnes", 
        ChildMaterial AS "WasheryProductionDetails/WasheryOutput/MaterialCode", 
        ChildStockpile AS "WasheryProductionDetails/WasheryOutput/ProductStockpileCode", 
        CAST(ChildTonnes AS DECIMAL(18, 4)) AS "WasheryProductionDetails/WasheryOutput/ProductTonnes" 
      FROM  [TableName] 
     FOR 
      XML PATH(''), 
       TYPE 
     ) 
FOR  XML PATH(''), 
      ROOT('WasheryProduction') 

感謝

+0

投票結束爲「不是真正的問題」。 – Cerebrus 2009-04-28 06:08:37

+0

爲什麼?它問一個TSQL問題? RMDUSSA:你可以用更多的信息來重新解釋你的錯誤信息。 – 2009-04-28 08:40:18

回答

2

This page建議您需要對聲明進行硬編碼:

SELECT 

'<?xml version="1.0" ?>' 

+ 
SELECT (SELECT TOP 1 
... rest of your code goes here... 

編輯:更改了「UNION ALL」(whic h)顯示爲「+」(均取自鏈接頁面)。

+0

對不起,我以前試過,錯誤是所有使用UNION,INTERSECT或EXCEPT操作符組合的查詢必須在其目標列表中具有相同數量的表達式。 謝謝 – rmdussa 2009-04-29 04:29:32

2
Declare @SQL varchar(8000) 
Declare @xml xml 
Declare @strXML as varchar(max) 

set @xml = (select * from <tableName> for xml path('')) 
set @strXML='< ? xml version = "1.0" ? >' + convert(varchar(max), @xml) 

select @strXML 

set @SQL ='bcp "select '''[email protected]+'''" QueryOut "C:\xmlFile.xml" -r -w -t -T -S ' 

Exec master..xp_cmdshell @SQL