Tsql Powershell-复制或添加到数据表?

Tsql Powershell-复制或添加到数据表?,tsql,powershell,datatable,Tsql,Powershell,Datatable,我正在使用Chad Miller&Hey脚本编写Guy的函数,并将查询结果保存到datatable,然后将其写入SQL表 以下是我正在运行的代码: $dt = invoke-sqlcmd2 -serverinstance $_.server -query "exec master.dbo.sp_who" -As 'Datatable' write-datatable -serverinstance "myserverhere" -DATABASE "dbainfo" -tablename "w

我正在使用Chad Miller&Hey脚本编写Guy的函数,并将查询结果保存到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
我想在datatable中添加一个字段-我正在运行一个无法修改的SP,并想添加servername。我并行运行它,所以我不能使用暂存表,我必须修改现有的datatable或将其移动到新的datatable

  • 如何复制/更改datatable以获取附加列并将其设置为另一个变量
  • 如果我们使用第二个数据表,因为我在循环,我如何“截断” 在foreach循环中的下一次运行之前,是否将其清除
  • 更新:从$dt | select object*和$dt | get member*中添加一行

    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 | get member的结果:

    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;}                                                                
    

    我想您正在寻找
    添加成员

    我想您正在寻找
    添加成员

    您不想使用添加成员,因为这不会添加数据列类型。相反,请执行以下操作:

    $Col =  new-object Data.DataColumn
    $Col.ColumnName = "ServerName"
    $dt.Columns.Add($col)
    $dt | %{$_.ServerName = "myserverName"}
    
    顺便说一句,如果将get member与inputobject参数一起使用,您将看到列和add方法:

    gm-输入对象$dt

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

    您不想使用“添加成员”,因为这不会添加数据列类型。相反,请执行以下操作:

    $Col =  new-object Data.DataColumn
    $Col.ColumnName = "ServerName"
    $dt.Columns.Add($col)
    $dt | %{$_.ServerName = "myserverName"}
    
    顺便说一句,如果将get member与inputobject参数一起使用,您将看到列和add方法:

    gm-输入对象$dt

    这与

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

    如果您提供
    $dt | get member
    那么可能没有sql server的人也可以尝试帮助:-)@Graimer-添加,请告诉我您还需要什么!谢谢,太好了。Chad似乎为您找到了解决方案如果您提供
    $dt | get member
    ,那么可能没有sql server的人也可以尝试帮助:-)@Graimer-添加,请告诉我您还需要什么!谢谢,太好了。看来查德为youTried找到了解决办法,没有骰子
    $dt | Add Member-MemberType NoteProperty-Name ServerName-value'myservername'
    不起作用,$dt | Add Member-MemberType NoteProperty-Name ServerName-value'myservername'也不起作用,
    $dt | Add Member-MemberType NoteProperty-Name-value$.server
    ($\服务器在该点具有服务器名)当你说不起作用时,是有错误还是什么都没做?我假设你使用了
    Get Member
    来查看它是否被添加。
    Format-
    函数类可能不会显示它,即使它存在。没有-powershell新手,我以为select对象会显示所有内容。但是,我前后都运行了Get成员呃,两者是相同的。尝试过了,没有骰子。
    $dt | Add Member-MemberType NoteProperty-Name ServerName-value'myservername'
    不起作用,
    ,$dt | Add Member-MemberType NoteProperty-Name ServerName-value'myservername'
    也不起作用er($服务器在该点具有服务器名)当你说不起作用时,是有错误还是什么都没做?我假设你使用了
    Get Member
    来查看它是否被添加。
    Format-
    函数类可能不会显示它,即使它存在。没有-powershell新手,我以为select对象会显示所有内容。但是,我前后都运行了Get成员呃,两者是相同的。是的,但是获得一个普通的
    gm
    会让像我这样以前没有使用过datatables或脚本的人知道表中有什么类型的对象(例如
    System.Data.Data*
    objects而不是customobj)。:)此外,您可以将其简化为:
    $dt.Columns.Add(“服务器名”)$dt |%{$\u.ServerName=“myserverName”}
    @Graimer+1对您的评论进行简化。“gm-input$var”与“$var | gm”一开始让我感到困惑,所以我想在这里指出这一点,这肯定会使DataTable与datarowsys有所不同,但是获得一个正常的
    gm
    会让像我这样以前没有使用过datatables或脚本的人知道表中有什么类型的对象(例如,
    System.Data.Data*
    objects而不是customobj)。:)此外,您可以将其简化为:
    $dt.Columns.Add(“服务器名”)$dt |%{$\u.ServerName=“myserverName”}
    @Graimer+1对您的评论进行简化。“gm-input$var”和“$var | gm”一开始让我感到困惑,所以我想在这里指出这一点,并且肯定会在DataTable和DataRows中产生不同