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. 如果我们使用第二个数据表,因为我正在循环,我如何在 foreach 循环中的下一次运行之前“截断”它或清除它?

更新:从 $dt | 添加一行 选择对象 * 和 $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 | 的结果 获取成员:

类型名称: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"}

顺便说一句,如果您将 get-member 与 inputobject 参数一起使用,您将看到列和添加方法:

gm -inputobject $dt

这不同于 $dt | gm返回数据行的属性和方法。第一个不展开。

于 2013-02-06T18:51:52.947 回答
0

我想你正在寻找Add-Member

于 2013-02-06T18:22:29.450 回答