0

Chad Miller と Hey Scripting Guy の関数invoke-sqlcmd2write-datatableを使用して、クエリの結果をデータ テーブルに保存し、それを SQL テーブルに書き込みます。

私が実行しているコードは次のとおりです。

$dt = invoke-sqlcmd2 -serverinstance $_.server -query "exec master.dbo.sp_who" -As 'Datatable' 
write-datatable -serverinstance "myserverhere" -DATABASE "dbainfo" -tablename "who_sp_results" -DATA $dt

データテーブルにフィールドを追加したい - 変更できない SP を実行していて、サーバー名を追加したい。並行して実行しているため、ステージング テーブルを使用できません。既存のデータ テーブルを変更するか、新しいデータ テーブルに移動する必要があります。

  1. データテーブルをコピー/変更して追加の列を取得し、それを別の変数に設定するにはどうすればよいですか?
  2. ループしているので、2 番目のデータテーブルを使用する場合、foreach ループ内で次の実行の前にそれを「切り捨てる」またはクリアするにはどうすればよいですか?

更新: $dt から 1 行を追加 | select-object * 、および $dt | メンバーを取得

spid       : 1
ecid       : 0
status     : background                    
loginame   : sa
hostname   :                                                                                                                           

blk        : 0    
dbname     : 
cmd        : RESOURCE MONITOR
request_id : 0
RowError   : 
RowState   : Unchanged
Table      : {sa, sa, sa, sa...}
ItemArray  : {1, 0, background                    , sa...}
HasErrors  : False

$dt | の結果は次のとおりです。取得メンバー:

TypeName: System.Data.DataRow

Name              MemberType            Definition                                                                                     
----              ----------            ----------                                                                                     
AcceptChanges     Method                System.Void AcceptChanges()                                                                    
BeginEdit         Method                System.Void BeginEdit()                                                                        
CancelEdit        Method                System.Void CancelEdit()                                                                       
ClearErrors       Method                System.Void ClearErrors()                                                                      
Delete            Method                System.Void Delete()                                                                           
EndEdit           Method                System.Void EndEdit()                                                                          
Equals            Method                bool Equals(System.Object obj)                                                                 
GetChildRows      Method                System.Data.DataRow[] GetChildRows(string relationName), System.Data.DataRow[] GetChildRows(...
GetColumnError    Method                string GetColumnError(int columnIndex), string GetColumnError(string columnName), string Get...
GetColumnsInError Method                System.Data.DataColumn[] GetColumnsInError()                                                   
GetHashCode       Method                int GetHashCode()                                                                              
GetParentRow      Method                System.Data.DataRow GetParentRow(string relationName), System.Data.DataRow GetParentRow(stri...
GetParentRows     Method                System.Data.DataRow[] GetParentRows(string relationName), System.Data.DataRow[] GetParentRow...
GetType           Method                type GetType()                                                                                 
HasVersion        Method                bool HasVersion(System.Data.DataRowVersion version)                                            
IsNull            Method                bool IsNull(int columnIndex), bool IsNull(string columnName), bool IsNull(System.Data.DataCo...
RejectChanges     Method                System.Void RejectChanges()                                                                    
SetAdded          Method                System.Void SetAdded()                                                                         
SetColumnError    Method                System.Void SetColumnError(int columnIndex, string error), System.Void SetColumnError(string...
SetModified       Method                System.Void SetModified()                                                                      
SetParentRow      Method                System.Void SetParentRow(System.Data.DataRow parentRow), System.Void SetParentRow(System.Dat...
ToString          Method                string ToString()                                                                              
Item              ParameterizedProperty System.Object Item(int columnIndex) {get;set;}, System.Object Item(string columnName) {get;s...
blk               Property              System.String blk {get;set;}                                                                   
cmd               Property              System.String cmd {get;set;}                                                                   
dbname            Property              System.String dbname {get;set;}                                                                
ecid              Property              System.Int16 ecid {get;set;}                                                                   
hostname          Property              System.String hostname {get;set;}                                                              
loginame          Property              System.String loginame {get;set;}                                                              
request_id        Property              System.Int32 request_id {get;set;}                                                             
spid              Property              System.Int16 spid {get;set;}                                                                   
status            Property              System.String status {get;set;}                                                                
4

2 に答える 2

3

これはデータ列のタイプを追加しないため、add-member は使用しません。代わりに、次のようにします。

$Col =  new-object Data.DataColumn
$Col.ColumnName = "ServerName"
$dt.Columns.Add($col)
$dt | %{$_.ServerName = "myserverName"}

ところで、inputobject パラメータで get-member を使用すると、列が表示され、メソッドが追加されます。

gm -inputobject $dt

これは$dt |とは異なります 。データ行のプロパティとメソッドを返すgm . 最初のものは展開されません。

于 2013-02-06T18:51:52.947 に答える
0

私はあなたが探していると思いますAdd-Member

于 2013-02-06T18:22:29.450 に答える