REFERENCES
というテーブルがあります。このテーブルには、数十万行のXML行が含まれており、個別のXMLファイルとして抽出します。SQLテーブルから個々のファイルにXML列の行をエクスポートする
は、それはおおよそようにフォーマットされる:私はすべての行およびバルクエクスポートREFERENCE_ID
として各REFERENCE_XML
列と名称を介してループしたい
+--------------+------------------+
| REFERENCE_ID | REFERENCE_XML |
+--------------+------------------+
| 1 | <xml>...</xml> |
| 2 | <xml>...</xml> |
| 3 | <xml>...</xml> |
| 4 | <xml>...</xml> |
| ... | <xml>...</xml> |
| 70000 | <xml>...</xml> |
+--------------+------------------+
。
マイ出力フォルダのセットは、次のようなになります。
C:\References\1.xml
C:\References\2.xml
C:\References\3.xml
C:\References\4.xml
C:\References\...
C:\References\70000.xml
私は単一の静的行に対する操作を行い、ラフなクエリを見つけることができたが、私は最善の方法を考え出す困難な時間を過ごしていますWHILE
ループまたはCURSOR
を作成します。 REFERENCES
テーブル内のすべての行をループし、すべてのXMLを個別のファイルとしてエクスポートするには、ファイル名とWHERE
句を動的にするにはどうすればよいですか?
DECLARE @fileName VARCHAR(MAX)
DECLARE @sqlStr VARCHAR(MAX)
DECLARE @sqlCmd VARCHAR(MAX)
SET @fileName = 'C:\References\1.xml' -- I need the integer value to be dynamic per row.
SET @sqlStr = SELECT REFERENCE_XML FROM REFERENCE_DB.dbo.REFERENCES WHERE REFERENCE_ID = 1' -- I need the REFERENCE_ID to be dynamic per row.
SET @sqlCmd = 'bcp "' + @sqlStr + '" queryout ' + @fileName + ' -w -T'
EXEC xp_cmdshell @sqlCmd
(特に@sqlStr行に対して)いくつかの変更を加えれば、これを正常に実行することができました。 XMLをNVARCHARとしてキャストする必要はありませんでした。 bcpは何の問題もなくXMLを処理できました。ありがとうございました! – PicoDeGallo