【问题标题】:Store Invoke-Sqlcmd Query as String将 Invoke-Sqlcmd 查询存储为字符串
【发布时间】:2018-04-08 10:41:37
【问题描述】:

我有一个值要查找并从数据库中提取。我拥有运行此脚本所需的一切,除了如何将结果存储在变量中,然后将这些结果写入 txt 文件

$CNumber = Invoke-Sqlcmd -query ("Select Cust From SY.CompanyCode") -ServerInstance $SQLInstance -Database $Database

Add-Content $Mobile $CNumber

当它将结果写入文本文件时,它看起来像这样:

System.Data.DataRow

当我只运行 Invoke-Sqlcmd 并且不尝试将其存储在变量中时,我可以看到正确的值。所以我假设一旦这个查询运行,我需要以某种方式转换结果?

请,谢谢。

【问题讨论】:

  • 谢谢。 ...是的。

标签: sql sql-server powershell invoke-sqlcmd


【解决方案1】:

由于查询的结果是System.Data.DataRow,因此PowerShell首先需要将DataRow转换为String,然后才能与Add-Content一起使用,最简单的方法是将任何对象转换为@987654325 @ 是使用ToString() 方法。

您可以通过调用自行检查

$CNumber.ToString()

它应该在控制台中显示为:

System.Data.DataRow # OR System.Object[] if there are multiple DataRows

由于您只选择一列,您可以简单地访问 DataRow 上的属性,但请记住,查询可能会返回多个 DataRows,我们应该遍历它们,如下所示:

foreach($row in $CNumber.Cust)
{
    # row will be equal to each cust from the query
    # add row to your file here
}

【讨论】:

  • 看到这很奇怪,我在发布我的问题之前测试了这个确切的方法,但由于某种原因,我仍然以 System.Data.Datarow 结束。
  • 找到为什么这不起作用,根据 .NET 规范 .tostring 将输出对象类型。为了转换它,我需要运行以下命令: Add-Content $Mobile $CNumber.itemarray 非常感谢您抽出宝贵的时间。干杯!
猜你喜欢
  • 2015-04-07
  • 2021-05-28
  • 1970-01-01
  • 2018-12-08
  • 2020-04-30
  • 1970-01-01
  • 2012-09-18
  • 2011-09-03
  • 1970-01-01
相关资源
最近更新 更多