2015-09-02 75 views
-1

我一直在網上搜索的最後幾天,不幸找不到我正在尋找什麼。我有一個包含2列的SQL Server 2012表,其中一個是PurchaseOrder DataType varchar(10),另一個是具有XML數據類型的數據。目前,存儲過程運行幾個小時後會發生什麼情況,以檢查某個表的數值,然後以所需的XML格式創建PurchaseOrder。這已經由我將要發送數據的公司實現並驗證。我現在遇到的問題是我想創建一個SSIS包,查看此表並創建多個xml文件,其中數據字段的內容爲「不將內容放入一長行」,然後使用PurchaseOrder字段作爲文件名稱。我已經找到了各種解決方案使用腳本任務,因爲在SSIS中沒有原生的XML目標,但是掙扎並且對於SSIS來說是一個新手而沒有獲得任何快速的地方。任何人都可以提供任何幫助,指導,YouTube的鏈接,甚至有一部分的方式包裝。導出XML數據到多個文件,但保留結構

由於P

除了上述問題,我曾嘗試使用BCP命令去了解它,下面是以下代碼的偉大工程,只是希望在頂部1記錄

DECLARE @fileName VARCHAR(50) 

DECLARE @sqlStr VARCHAR(1000) 
DECLARE @sqlCmd VARCHAR(1000) 

SET @fileName = 'C:\Temp\test.xml' 
SET @sqlStr = 'select TOP 1 Data from DatabaseName.dbo.OutputXML' 

SET @sqlCmd = 'bcp "' + @sqlStr + '" queryout ' + @fileName + ' 
-w -T -S Server\Instance' 

EXEC xp_cmdshell @sqlCmd 

什麼然後我做的是將其添加到遊標中,該遊標再次運行到某個點,它創建我的文件,使用purchaseorder作爲文件名並輸出相關信息,但它不再保存適當的xml格式,它返回到看起來像一個沒有原始格式的字符串,是因爲我將它嵌入到遊標中?以下是我正在使用的代碼

DECLARE @fileName VARCHAR(50) 
DECLARE @sqlStr VARCHAR(1000) 
DECLARE @sqlCmd VARCHAR(1000) 

DECLARE xml_cursor CURSOR FOR 

SELECT PurchaseOrder from DatabaseName.dbo.OutputXML 

OPEN xml_cursor 

FETCH NEXT FROM xml_cursor INTO @fileName 

WHILE @@FETCH_STATUS = 0 
BEGIN 

SET @fileName = 'C:\Temp\'[email protected]+'.xml' 
SET @sqlStr = 'select Data from DatabaseName.dbo.OutputXML' 

SET @sqlCmd = 'bcp "' + @sqlStr + '" queryout ' + @fileName + ' 
-w -T -S Server\Instance' 

EXEC xp_cmdshell @sqlCmd 

FETCH NEXT FROM xml_cursor into @fileName 

END 
CLOSE xml_cursor 
DEALLOCATE xml_cursor 
+0

你用你的光標的唯一事情是文件名,則需要通過取得密鑰並將其添加到過濾你的輸出你的@sqlStr也是如此。否則,每個文件將包含所有記錄。請記住,BCP是一個命令行實用程序,不考慮您的光標 –

回答

2

由於bcp是命令行實用程序,它不知道遊標。您只能更改傳遞的參數。您已經通過光標@filename,您還需要過濾查詢。下面是如何解決你的問題,但它遠非一個很好的解決方案,它會很慢。我不知道你的關鍵是所謂的,所以我把它叫做SomeKey

DECLARE @fileName VARCHAR(50) 
DECLARE @sqlStr VARCHAR(1000) 
DECLARE @sqlCmd VARCHAR(1000) 
DECLARE @SomeKey VARCHAR(100) --Put your key datatype here 

DECLARE xml_cursor CURSOR FOR 

-- replace SomeKey with your key 
SELECT SomeKey,PurchaseOrder FROM DatabaseName.dbo.OutputXML 

OPEN xml_cursor 

FETCH NEXT FROM xml_cursor INTO @SomeKey,@fileName 

WHILE @@FETCH_STATUS = 0 
BEGIN 

SET @fileName = 'C:\Temp\' + @filename + '.xml' 
SET @sqlStr = 'SELECT Data FROM DatabaseName.dbo.OutputXML WHERE SomeKey = ''' + @SomeKey +'''' 

SET @sqlCmd = 'bcp "' + @sqlStr + '" queryout ' + @fileName + '-w -T -S Server\Instance' 

EXEC xp_cmdshell @sqlCmd 

FETCH NEXT FROM xml_cursor into @SomeKey,@fileName 

END 
CLOSE xml_cursor 
DEALLOCATE xml_cursor 
+0

偉大的答案 - 它幫助了我很多 – LearnByReading

相關問題