如何通过powershell从sql表中显示xml内容?

时间:2011-08-04 05:25:11

标签: sql powershell xml

我需要做的是: 1,从sql server datatable中查询一行xml。请参见下面的图片,名为StageDesc内容的行xml文件。

The Row named StageDesc contents xml file

2,xml文件包含了我需要获取的路径//sharespace/test1/10.0.1212.0,这在xml文件中形成为<releasepath>//sharespace/test1/10.0.1212.0</releasepath>

以下是我的代码尝试获取它:

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand

$SqlQuery = "SELECT Stage.Description as StageDesc,Stage.StageStatusId FROM [Build].[dbo].[WorkflowInstance_View] as Build
  join [Build].[dbo].[Stage_View] as Stage on Build.Id=Stage.[WorkflowInstanceId] where Stage.ParentId is null and Stage.StageStatusId <>4 and Stage.StageStatusId <>7 order by Build.Id desc"

$SqlCmd.CommandText = $SqlQuery

$SqlCmd.Connection = $Connection

$DBResult = $sqlcmd.ExecuteReader()

$DataTable = New-Object system.data.datatable

$DataTable.load($DBResult)

foreach ($StageDesc in $DataTable) {

[XML]$ReturnedXML=$StageDesc.releasepath

}

代码已通过但未返回任何内容。为什么会这样?有人愿意帮助我吗?

3 个答案:

答案 0 :(得分:2)

您将xml数据分配给变量$ RetrunedXML,并在foreach的每次迭代时覆盖赋值。你检查了$ ReturnedXML吗?

使用SQL Server 2008的示例数据库,我可以使用:

$serverName = "$env:computername\sql1"
$databaseName = "AdventureWorks"
$query = "SELECT * from Person.Contact where AdditionalContactInfo IS NOT NULL"
$conn=new-object System.Data.SqlClient.SQLConnection
$connString = “Server=$serverName;Database=$databaseName;Integrated Security=SSPI;”
$conn.ConnectionString=$connString
$conn.Open()
$cmd=new-object system.Data.SqlClient.SqlCommand($Query,$conn)
$da = New-Object “System.Data.SqlClient.SqlDataAdapter” ($cmd)
$dt = New-Object “System.Data.DataTable”
$da.fill($dt) | out-null
$conn.Close()

$dt | foreach {[xml]$ReturnedXML = $_.AdditionalContactInfo; $ReturnedXML}

答案 1 :(得分:0)

您在代码中所做的只是声明和分配变量。没有输出或显示任何内容的代码。你也没有返回任何变量。那么你期望代码应该返回什么?在哪一行?你有没有尝试调试代码?

答案 2 :(得分:0)

$da.fill($dt)

将查询结果加载到DataTable $ dt。

$dt | Out-GridView

显示所有数据。

这个脚本对我很有用(除了最后一行,它不适用于我的情况)。