Sql server 在powershell中使用invokeSQL命令以换行方式输入XML数据
我使用的是powershell脚本,它将从FOR XML EXPLICIT类型的sqlquery返回XML。 现在,查询返回了带有标题和虚线的列中的XMLSql server 在powershell中使用invokeSQL命令以换行方式输入XML数据,sql-server,xml,powershell,Sql Server,Xml,Powershell,我使用的是powershell脚本,它将从FOR XML EXPLICIT类型的sqlquery返回XML。 现在,查询返回了带有标题和虚线的列中的XML XML 32776498797309 --------------------- <data>asdsafafaf<\data><value>dfsasfasfdfasdf.... dfdsfsdgregrge<\value><value>asdfasdfadfadfsda<\
XML 32776498797309
---------------------
<data>asdsafafaf<\data><value>dfsasfasfdfasdf....
dfdsfsdgregrge<\value><value>asdfasdfadfadfsda<\v
alue>
尝试使用“设置内容”而不是“输出文件”。Out文件将使用主机/控制台格式,而set内容不使用。您需要处理将XML输出到字符串
invoke-sqlcmd ....| select -expandproperty XML | set-content -path $outputFilePath
已编辑。添加了完整的工作示例:
#Contents of my test inputfile.sql:
SELECT CAST ('<EVENT_INSTANCE>
<EventType>CREATE_TABLE</EventType>
<PostTime>2011-04-26T15:05:21.333</PostTime>
<SPID>56</SPID>
<ServerName>Z001\SQL1</ServerName>
<LoginName>Contoso\u00</LoginName>
<UserName>dbo</UserName>
<DatabaseName>AdventureWorksDW2008R2</DatabaseName>
<SchemaName>dbo</SchemaName>
<ObjectName>AdventureWorksDWBuildVersion</ObjectName>
<ObjectType>TABLE</ObjectType>
<TSQLCommand>
<SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE" />
<CommandText>CREATE TABLE [dbo].[AdventureWorksDWBuildVersion] (
[DBVersion] [nvarchar] (50) NULL,
[VersionDate] [datetime] NULL
) ON [PRIMARY];
</CommandText>
</TSQLCommand>
</EVENT_INSTANCE>' AS XML)
$inputFilePath = "C:\Temp\inputfile.sql"
$dbHostName = "$env:computername\sql1"
$outputFilePath = "C:\Temp\output.txt"
#Notice Extra Line Breaks
invoke-sqlcmd -inputFile $inputFilePath -serverinstance $dbHostName |
Format-Table -hide -Wrap -AutoSize |
Out-File -filePath $outputFilePath -width 4096
#No Extra line breaks using set-content
invoke-sqlcmd -inputFile $inputFilePath -serverinstance $dbHostName | select -expandproperty Column1 | set-content -Path $outputFilePath
#我的测试输入文件.sql的内容:
选择CAST('
创建表
2011-04-26T15:05:21.333
56
Z001\SQL1
Contoso\u00
dbo
冒险工作DW2008R2
dbo
AdventureWorksDWBuildVersion
桌子
创建表[dbo]。[AdventureWorksDWBuildVersion](
[DBVersion][nvarchar](50)空,
[VersionDate][datetime]空
)关于[初级];
'作为XML)
$inputFilePath=“C:\Temp\inputfile.sql”
$dbHostName=“$env:computername\sql1”
$outputFilePath=“C:\Temp\output.txt”
#注意额外的换行符
调用sqlcmd-inputFile$inputFilePath-serverinstance$dbHostName |
格式表-隐藏-换行-自动调整大小|
输出文件-文件路径$outputFilePath-宽度4096
#使用集合内容时没有额外的换行符
调用sqlcmd-inputFile$inputFilePath-serverinstance$dbHostName | select-expandproperty Column1 | set content-Path$outputFilePath
使用Invoke-SQLCMD命令的-MaxCharLength参数。默认值为4000。它将截断大型XML
请参见out字符串也将截断数据而不是out字符串。请参阅我修改后的示例,将输出文件的输出与设置的内容代码进行比较。我仍然得到换行符和额外的空格。我有大量的XML数据,这是一个问题吗?也许源代码中有一行中断。您可以通过join运行它:$xml=invoke sqlcmd-inputfile$xml=$xml-join
#Contents of my test inputfile.sql:
SELECT CAST ('<EVENT_INSTANCE>
<EventType>CREATE_TABLE</EventType>
<PostTime>2011-04-26T15:05:21.333</PostTime>
<SPID>56</SPID>
<ServerName>Z001\SQL1</ServerName>
<LoginName>Contoso\u00</LoginName>
<UserName>dbo</UserName>
<DatabaseName>AdventureWorksDW2008R2</DatabaseName>
<SchemaName>dbo</SchemaName>
<ObjectName>AdventureWorksDWBuildVersion</ObjectName>
<ObjectType>TABLE</ObjectType>
<TSQLCommand>
<SetOptions ANSI_NULLS="ON" ANSI_NULL_DEFAULT="ON" ANSI_PADDING="ON" QUOTED_IDENTIFIER="ON" ENCRYPTED="FALSE" />
<CommandText>CREATE TABLE [dbo].[AdventureWorksDWBuildVersion] (
[DBVersion] [nvarchar] (50) NULL,
[VersionDate] [datetime] NULL
) ON [PRIMARY];
</CommandText>
</TSQLCommand>
</EVENT_INSTANCE>' AS XML)
$inputFilePath = "C:\Temp\inputfile.sql"
$dbHostName = "$env:computername\sql1"
$outputFilePath = "C:\Temp\output.txt"
#Notice Extra Line Breaks
invoke-sqlcmd -inputFile $inputFilePath -serverinstance $dbHostName |
Format-Table -hide -Wrap -AutoSize |
Out-File -filePath $outputFilePath -width 4096
#No Extra line breaks using set-content
invoke-sqlcmd -inputFile $inputFilePath -serverinstance $dbHostName | select -expandproperty Column1 | set-content -Path $outputFilePath