2009-04-28 126 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