《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——2.13 创建视图...

    xiaoxiao2024-05-20  130

    本节书摘来自异步社区出版社《PowerShell V3—SQL Server 2012数据库自动化运维权威指南》一书中的第2章,第2.13节,作者:【加拿大】Donabel Santos,更多章节内容可以访问云栖社区“异步社区”公众号查看。

    2.13 创建视图

    本方案展示了如何用PowerShell和SMO创建视图。

    2.13.1 准备

    我们将会使用AdventureWorks2008R2数据库的Person.Person表。

    为了知道我们将会创建什么,我们给出了等价的T-SQL。

    CREATE VIEW dbo.vwVCPerson AS SELECT   TOP 100 BusinessEntityID, LastName, FirstName FROM Person.Person WHERE   PersonType = 'IN' ORDER BY   LastName GO

    2.13.2 如何做…

    1.通过“Start | Accessories | Windows PowerShell | Windows PowerShell ISE”打开PowerShell控制台。

    2.导入SQLPS模块,创建一个新的SMO服务器对象。

    #import SQL Server module Import-Module SQLPS –DisableNameChecking #replace this with your instance name $instanceName = "KERRIGAN" $server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server -ArgumentList $instanceName

    3.添加下面的脚本并运行。

    $dbName = "AdventureWorks2008R2" $db = $server.Databases[$dbName] $viewName = "vwVCPerson" $view = $db.Views[$viewName] #if view exists, drop it if ($view) {    $view.Drop() } $view = New-Object -TypeName Microsoft.SqlServer.Management.SMO.View –ArgumentList $db, $viewName, "dbo" #TextMode = false meaning we are not #going to explicitly write the CREATE VIEW header $view.TextMode = $false $view.TextBody = @" SELECT    TOP 100 BusinessEntityID, LastName, FirstName FROM Person.Person WHERE   PersonType = 'IN' ORDER BY   LastName "@ $view.Create()

    4.通过在PowerShell中运行下面的代码测试视图。

    $result = Invoke-Sqlcmd ` -Query "SELECT * FROM vwVCPerson" ` -ServerInstance "$instanceName" ` -Database $dbName $result | Format-Table –AutoSize

    5.检查是否已创建视图。打开SSMS,展开AdventureWorks2008R2数据库的Views。

    2.13.3 如何实现…

    为了使用SMO和PowerShell创建视图,你首先需要创建一个SMO View变量,它需要3个参数:database handle、view name和schema。

    $view = New-Object -TypeName Microsoft.SqlServer.Management.SMO.View -ArgumentList $db, $viewName, "dbo"

    可选的设置视图的所有者。

    $view.Owner = "QUERYWORKS\aterra"

    视图创建的核心是视图的定义。我们将TextMode属性设置为true或false。

    $view.TextMode = $false $view.TextBody = @" SELECT    TOP 100 BusinessEntityID, LastName, FirstName FROM Person.Person WHERE   PersonType = 'IN' ORDER BY   LastName "@

    如果将TextMode属性设置为false,意味着让SMO构造视图头部。

    $view.TextMode = $false

    如果将TextMode属性设置为true,意味着你需要定义视图的TextHeader属性。

    $view.TextMode = $true $view.TextHeader = "CREATE VIEW dbo.vwVCPerson AS "

    当都准备好后,调用视图的Create方法。

    $view.Create()

    2.13.4 更多…

    当创建数据库对象如视图、存储过程或者函数,你需要为对象的定义写代码。尽管技术上允许你将代码放在一行,但是将它们放在多行格式更具可读性。

    为了嵌入代码块到PowerShell,你需要创建一个字符串。该字符串以@”开始并什么都不跟,并且以”@结束,且必须是该行开头的前两个字符。

    $view.TextBody = @" SELECT    TOP 100 BusinessEntityID, LastName, FirstName FROM Person.Person WHERE   PersonType = 'IN' ORDER BY   LastName "@

    这个构造可能让你会向导C类型注释,以/开头以/结束,只是使用不同的字符。

    最新回复(0)