我正在尝试通过powershell实现以下目标:
我有一个包含5列的表(TBL_DDL) (CATALOG、SCHEMA、OBJECT_TYPE、OBJECT_NAME、DDL)
现在,我正在从这个表中提取数据,然后尝试通过连接C: drive中的前4列(CATALOG,SCHEMA,OBJECT_TYPE,OBJECT_NAME)来创建文件夹结构,然后将数据导出到txt文件中的DDL列中。
例如: C:\"CATALOG"\"SCHEMA"\"OBJECT_TYPE"\"OBJECT_NAME"\DDL.txt
我正试图通过powershell来实现这一点。有谁能帮帮我吗?
$SqlCmd = 'snowsql -c example -d tu_test -s public  -q "select catalog,schema,OBJECT_TYPE,OBJECT_NAME,DDL from SF_TBL_DDL limit 2"'
$MultiArray = @(Invoke-Expression $SqlCmd)
$dt = New-Object System.Data.Datatable
[void]$dt.Columns.Add("CATALOG")
[void]$dt.Columns.Add("SCHEMA")
$Output = foreach ($Object in $MultiArray)
        {
        foreach ($SCHEMA in $Object.SCHEMA) 
            {
            $someother = New-Object -TypeName psobject -Property @{CATALOG = $Object.CATALOG; SCHEMA = $SCHEMA}
            $nRow = $dt.NewRow()
            $nRow.CATALOG = $someother.CATALOG
            $nRow.SCHEMA = $someother.SCHEMA
            $dt.Rows.Add($nRow)
            }   
        }
$dt.row.count目前,我在$dt中得到了0行。干杯
发布于 2020-05-04 21:07:04
您可以使用System.Data.DataTable对象提取您的结果集,然后循环执行所需的操作。
在这里,GetTableValues函数将检索表值,然后使用以下cmdlet创建目录和文件
  New-Item -ItemType "directory" -Path $dirPath
  New-Item -ItemType "file" -Path $filePath完整的代码如下所示
function GetTableValues(){
$DBConnectionString = "<Your DB connection string>";
$sqlConn = new-object System.Data.SqlClient.sqlConnection $DBConnectionString;
$sqlConn.Open();
$sqlCommand = $sqlConn.CreateCommand();
$sqlCommand.CommandText = "select catalog,[schema],OBJECT_TYPE,OBJECT_NAME,DDL from TBL_DDL"; ##Put your correct query here
$result = $sqlCommand.ExecuteReader();
$table = New-Object System.Data.DataTable;
$table.Load($result);
$sqlConn.Close();
return $table;
}
    $tableValue = GetTableValues;
    foreach ($Row in $tableValue)
    { 
      $filePath = "C:\" + $Row.catalog.TrimEnd() + "\" + $Row.schema.TrimEnd() + "\" + $Row.OBJECT_TYPE.TrimEnd() + "\" + $Row.OBJECT_NAME.TrimEnd() + "\" + $Row.DDL.TrimEnd() + ".txt" 
      $dirPath = "C:\" + $Row.catalog.TrimEnd() + "\" + $Row.schema.TrimEnd() + "\" + $Row.OBJECT_TYPE.TrimEnd() + "\" + $Row.OBJECT_NAME.TrimEnd()  
      New-Item -ItemType "directory" -Path $dirPath  ##Creates directory
      New-Item -ItemType "file" -Path $filePath  ##Creates file in $dirPath directory   
    }这对我来说非常好。
https://stackoverflow.com/questions/61587099
复制相似问题