Dav*_*vid 5 xml sql-server powershell
我正在执行以下命令:
sqlcmd -i "\\path\to\sqlfile.sql" -S "ServerName" -d "DBName" -y 0
Run Code Online (Sandbox Code Playgroud)
其中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
Run Code Online (Sandbox Code Playgroud)
(或者我可以-o在命令本身上使用,无论哪种方式我都没有强烈的偏好。)
这里的目标是拥有一个 XML 文件,然后可以将其加载到另一个下游流程中。这很有效,除了目前让我卡住的一个细节。输出(到文件)自动换行为 2,033 个字符。这意味着如果(在大多数情况下)包装破坏了标签,它会生成损坏的 XML:
<SomeTag>This is some content just to illustrate.</Som
eTag>
Run Code Online (Sandbox Code Playgroud)
我试过-w在sqlcmd论点上使用。在测试中,如果值低于 2,033,但在任何高于 2,033 的值(20000例如,这将足够宽)时将成功换行,则将保持相同的最大值 2,033。
我还尝试-replace在管道输出之前调用以尝试删除换行符,例如:
([the sqlcmd command above]) -replace "\r", "" | Out-File C:\path\to\output.xml
Run Code Online (Sandbox Code Playgroud)
包括对\r、\n、\r\n和使用反引号而不是反斜杠的尝试。一切都无济于事。(在测试中,-replace "KnownString", "TEST"确实成功地用TEST.替换了已知字符串。)
也许隧道视野已经接管了这里。我错过了更容易的东西吗?目标是拥有一个 PowerShell 命令行命令,该命令执行.sql文件并将有效的 XML(不需要漂亮地打印,尽管这很酷)放入.xml文件中。
有什么我可以在这里添加/修改的东西来突破 2,033 个字符的宽度限制吗?或者也许是一种更具创造性的方法来实现相同的目标?
跟进另一个答案...
(注意:在这种情况下,我必须专门针对 SQL 2012。这是一个客户拥有的工作站,他们有自己的规则。)
我将我的.sql文件包含在以下内容中:
SET NOCOUNT ON
DECLARE @XML AS XML
SET @XML = ([the great big set of nested selects generating xml])
SELECT CAST(@XML AS NVARCHAR(MAX))
Run Code Online (Sandbox Code Playgroud)
然后简单地调用为:
sqlcmd -i "\\path\to\sqlcode.sql" -S "ServerName" -d "DBName" -o "C:\path\to\output.xml" -y0
Run Code Online (Sandbox Code Playgroud)
结果是输出文件中的一行 XML。(稍后我可以漂亮地打印它。)
| 归档时间: |
|
| 查看次数: |
2227 次 |
| 最近记录: |