之前寫有一篇有關《PowerShell应用之-生成创建表的Transact-SQL脚本》,今早再拿來應用的時候,發現無法按照指定的某一些表來生成腳本。
現在特補充這一功能,先在原來腳本開頭位置,增加一個變量$TablesList:
<#===========================================#>
##生成创建表的脚本V2.0,包含Constraints,Indexes,Triggers
$serverInstance="PC20\SQL2005DE"
$userName="sa"
$password="pc202005"
$DataBase="PeripheralDataCollection"
$SrciptOutputPath="E:\"
$TablesList="" #要生產腳本的表,多表使用逗号“,”分隔
<#===========================================#>
##生成创建表的脚本V2.0,包含Constraints,Indexes,Triggers
$serverInstance="PC20\SQL2005DE"
$userName="sa"
$password="pc202005"
$DataBase="PeripheralDataCollection"
$SrciptOutputPath="E:\"
$TablesList="" #要生產腳本的表,多表使用逗号“,”分隔
<#===========================================#>
再在
#获得数据库中的用户表
$Tables=((New-Object "Microsoft.SqlServer.Management.Smo.Server" $ServerConnection).databases[$DataBase]).tables | Where-Object -FilterScript{$_.IsSystemObject -eq $False}
$Tables=((New-Object "Microsoft.SqlServer.Management.Smo.Server" $ServerConnection).databases[$DataBase]).tables | Where-Object -FilterScript{$_.IsSystemObject -eq $False}
增加篩選條件:
#获得数据库中的用户表
$Tables=((New-Object "Microsoft.SqlServer.Management.Smo.Server" $ServerConnection).databases[$DataBase]).tables | Where-Object -FilterScript{($_.IsSystemObject -eq $False) -and ( ( ($TablesList -split ",") -contains $_.name) -or ( $TablesList -eq "") ) }
$Tables=((New-Object "Microsoft.SqlServer.Management.Smo.Server" $ServerConnection).databases[$DataBase]).tables | Where-Object -FilterScript{($_.IsSystemObject -eq $False) -and ( ( ($TablesList -split ",") -contains $_.name) -or ( $TablesList -eq "") ) }
主要增加代碼:
-and ( ( ($TablesList -split ",") -contains $_.name) -or ( $TablesList -eq "") )
其中 ($TablesList -split ",") 應用到表達式"-split"把$TablesList 轉換成列表形式,再通過“-contains”表達式,判斷轉換列表中是否包含有當前返回的table名。
-or ( $TablesList -eq "") 部份只是應用于當$TablesList為空的情況。
生成创建表的脚本V2.0,完整腳本如下:
}
}