iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0

上回我們在PowerShell使用了命令列來讀取我們的.csv靜態檔案,不過對於檔案裡的資料來源,我們是直接在檔案裏面輸入資料來讓PowerShell讀取,今天我們來嘗試看看,將做為資料來源的靜態檔案以更方便的方式產生,假設我們的目的是把A資料庫中所有資料表以及資料內容遷移至B資料庫中,接下來我們一步一步的完成這項工作。


首先我們需要知道A資料庫裡的資料表作為我們匯出.sql腳本的物件,先使用sqlcmd進行查詢,並且這次我們將查詢結果匯出成另一種檔案型式-.txt,語法如下:

sqlcmd -S . -d FirstDataBase -Q "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES" -o C:\temp\TableName.txt 

成功輸出檔案後,可以發現內容雖然有我們需要的物件資料,但是多了一些不必要的雜訊,我們加一些內容把不需要的內容一一砍掉,語法如下:

去除下方文字

sqlcmd -S . -d FirstDataBase -Q "SET NOCOUNT on;SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES" -o C:\temp\TableName.txt 

去除表頭

sqlcmd -S . -d FirstDataBase -Q "SET NOCOUNT on;SELECT TABLE_NAME + '' FROM INFORMATION_SCHEMA.TABLES" -o C:\temp\TableName.txt 

去除標線(利用findstr正則轉成另一個檔案,詳細請參考這裡)

sqlcmd -S . -d FirstDataBase -Q "SET NOCOUNT on;SELECT TABLE_NAME + '' FROM INFORMATION_SCHEMA.TABLES" -o C:\temp\TableName.txt 

findstr /R /C:"^[^-]*$"   C:\temp\TableName.txt  > C:\temp\TableNameList.txt 

接著我們建立變數去存取檔案的內容,並且看一下存取後的變數是否需要做調整,語法如下:

sqlcmd -S . -d FirstDataBase -Q "SET NOCOUNT on;SELECT TABLE_NAME + '' FROM INFORMATION_SCHEMA.TABLES" -o C:\temp\TableName.txt 
 
findstr /R /C:"^[^-]*$"   C:\temp\TableName.txt  > C:\temp\TableNameList.txt 

$TableNameList = Get-Content C:\temp\TableNameList.txt 

$TableNameList.count 
FOR($i=0;$i -lt $TableNameList.count;$i++)
{
  $TableNameList[$i]
}

由上可以得知,我們存取後的變數在陣列第一個位置為空白,除去之後內容就符合我們需求,所以只需要將陣列起始值設為1即可得到我們的資料來源物件。

更多小知識,我們下次見~~


上一篇
DAY 14 :PowerShell讀取csv檔案作為匯入物件
下一篇
DAY 16 :PowerShell整合匯出來源物件、匯出腳本及執行腳本
系列文
沒有厲害的頭腦,也能利用腳本實現懶人寫程式的夢想30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言