之前寫有一篇有關《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,完整腳本如下:
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
測試:
(完.)