2

私が次のことをすると、

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 型を受け入れる関数に渡したいと考えています。

詳細については、Windows 7 の PowerShell 2 で以前の SQL サーバー (SQL Server 2008) の公式 MS ディストリビューションをラップする Chad Miller の SQLPS モジュールを使用しています。

これはボックス化とボックス化解除に関係があるのではないかと思いますが、私には明らかではありません.

クエリ結果を System.Data.DataSet 型として返す方法はありますか?

4

3 に答える 3

3

2016 年 7 月バージョンの sqlps では、次のように簡単に実行できます。

Invoke-Sqlcmd "select 1 as foo" -OutputAs DataTables

いい物!

于 2016-11-28T15:39:58.060 に答える
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
于 2013-02-04T17:20:18.863 に答える
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
于 2015-10-09T01:00:37.797 に答える