如果我执行以下操作,
PS > $a = Invoke-Sqlcmd -ServerInstance <blah> -Database <blah> -Query "SELECT <blah>"
(哪里只是有效内容的占位符)
然后返回的类型如下所示:
PS > $a.gettype()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
理想情况下,我想将$ a传递给一个接受System.Data.DataSet(或类似)形式的.NET类型的函数。
有关详细信息,我正在使用Chad Miller的SQLPS模块,它在Windows 7下的PowerShell 2上包装了早期SQL服务器(SQL Server 2008)的官方MS发行版。
我怀疑这可能与装箱和拆箱有关,但我不清楚。
有没有办法将查询结果作为System.Data.DataSet类型返回?
答案 0 :(得分:1)
这是一种不使用invoke-sqlcmd
返回[数据集]类型的方式(无法找到方法......)
$sql="SELECT <blah> FROM <dbo.blah>"
$connectionstring= "Server='myblahserver';database='blah';trusted_connection=yes;"
$ds = new-object data.dataset
$da = New-Object system.data.sqlclient.sqldataadapter $sql, $connectionstring
$null = $da.Fill($ds)
$ds.ExtendedProperties["sql"]= $sql
$ds.ExtendedProperties["connectionstring"]= $connectionstring
$ds
答案 1 :(得分:1)
从2016年7月版的sqlps开始,您可以简单地执行此操作:
Invoke-Sqlcmd "select 1 as foo" -OutputAs DataTables
好东西!
答案 2 :(得分:0)
我发现这样做的唯一方法是使用此处提供的代码创建一个将数组转换为数据表的函数:
https://gallery.technet.microsoft.com/scriptcenter/4208a159-a52e-4b99-83d4-8048468d29dd
加载此函数后,您可以获取invoke-sqlcmd的结果并将其传递到函数中,如下所示:
$results = Invoke-Sqlcmd -inputfile $scriptpath -ServerInstance $instance
$dt = $results | Out-Datatable