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

本节书摘来自异步社区出版社《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。

image

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值