我執行以下命令:SQLCMD和/或PowerShell的包裝XML輸出
sqlcmd -i "\\path\to\sqlfile.sql" -S "ServerName" -d "DBName" -y 0
其中sqlfile.sql
是DECLARE
報表少數幾個變量,然後嵌套SELECT ... FOR XML Path('...')
語句的樹最終生成一個大XML字符串作爲輸出。
在PowerShell命令提示符下,我管輸出到文件:
sqlcmd -i "\\path\to\sqlfile.sql" -S "ServerName" -d "DBName" -y 0 | Out-File C:\path\to\output.xml
(或者我可以使用的命令本身,我沒有強烈的偏好無論哪種方式-o
。)
的這裏的目標是讓一個XML文件可以被加載到另一個下游進程中。這工作得很好,除了目前我卡住的一個細節。輸出(到文件)以2,033個字符自動換行。這意味着它產生破壞的XML如果(在大多數情況下)的包裝打破了標籤:
<SomeTag>This is some content just to illustrate.</Som
eTag>
我使用的sqlcmd
參數-w
試過。在測試中,如果測試的值低於2,033,但高於2,033(例如,20000
,可能會超過足夠寬),則會保留相同的最大值2,033。
我也打過電話-replace
管道輸出之前嘗試刪除換行符,如:
([the sqlcmd command above]) -replace "\r", "" | Out-File C:\path\to\output.xml
要包括\r
嘗試,\n
,\r\n
,並採用背蜱,而不是反斜線。一切都無濟於事。 (在測試中,-replace "KnownString", "TEST"
確實成功地用TEST
取代了已知的字符串。)
也許隧道視野已經佔據了這裏。我錯過了什麼更容易?目標是使用PowerShell命令行命令執行.sql
文件,並將有效的XML(不需要漂亮打印,儘管這很酷)轉換爲.xml
文件。
有什麼我可以在這裏添加/修改,這將突破2,033字符的寬度限制?或者,也許更有創意的方法來實現相同的目標?
嘗試使用'-repalce'\ r | \ n''來處理換行/回車的任一順序?您還可以使用舊版本的'sqlcmd',在poweshell或cmdlet中使用本機'SqlClient'類(http://stackoverflow.com/questions/10894688/how-to-execute-sql-file-using-powershell)讀取數據。行爲似乎是SQL 2012中的一個已知錯誤,請參閱變通方法的鏈接https://connect.microsoft.com/SQLServer/feedback/details/786004/sqlcmd-with-xml-on-break-lines-on-large-輸出 –
@FrodeF .:看起來這些解決方法的組合正在訣竅中。具體而言,將'SELECT'封裝在'XML'類型變量中,然後選擇該變量爲'NVARCHAR(MAX)'。使用'sqlcmd',不需要替換字符。隨意添加爲答案,謝謝! – David