《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——2.14 创建存储过程
本节书摘来自异步社区出版社《PowerShell V3—SQL Server 2012数据库自动化运维权威指南》一书中的第2章,第2.14节,作者:【加拿大】Donabel Santos,更多章节内容可以访问云栖社区“异步社区”公众号查看。
本方案展示了如何用PowerShell和SMO创建加密的存储过程。
2.14.1 准备我们要用PowerShell创建的加密存储过程的等价T-SQL代码如下:
CREATE PROCEDURE [dbo].[uspGetPersonByLastName] @LastName [varchar] WITH ENCRYPTION SELECT TOP 10 BusinessEntityID, LastName FROM Person.Person WHERE LastName = @LastName2.14.2 如何做…
按照如下步骤使用PowerShell创建存储过程uspGetPersonByLastName。
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] #storedProcedure class on MSDN: #http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.storedproc edure.aspx $sprocName = "uspGetPersonByLastName" $sproc = $db.StoredProcedures[$sprocName] #if stored procedure exists, drop it if ($sproc) $sproc.Drop() $sproc = New-Object -TypeName Microsoft.SqlServer.Management.SMO.StoredProcedure -ArgumentList $db, $sprocName #TextMode = false means stored procedure header #is not editable as text #otherwise our text will contain the CREATE PROC block $sproc.TextMode = $false $sproc.IsEncrypted = $true $paramtype = [Microsoft.SqlServer.Management.SMO.Datatype]::VarChar(50); $param = New-Object –TypeName Microsoft.SqlServer.Management.SMO.StoredProcedureParameter –ArgumentList $sproc,"@LastName",$paramtype $sproc.Parameters.Add($param) #Set the TextBody property to define the stored procedure. $sproc.TextBody = @" SELECT TOP 10 BusinessEntityID, LastName FROM Person.Person WHERE LastName = @LastName # Create the stored procedure on the instance of SQL Server. $sproc.Create() #if later on you need to change properties, can use the Alter method
4.检查是否存储过程已创建。
(1)打开SSMS。
(2)展开AdventureWorks2008R2数据库。
(3)展开“Programmability | Stored Procedures”。
(4)查看存储过程是否在这里。
5.在PowerShell中测试存储过程。在同一个会话中,输入如下代码并运行。
$lastName = "Abercrombie" $result = Invoke-Sqlcmd ` -Query "EXEC uspGetPersonByLastName @LastName=`$LastName`" ` -ServerInstance "$instanceName" ` -Database $dbName $result | Format-Table –AutoSize2.14.3 如何实现…
为了创建存储过程,首先需要初始化SMO StoredProcedure对象。创建这个对象时,需要传递数据库句柄和存储过程名作为参数。
$sproc = New-Object -TypeName Microsoft.SqlServer.Management.SMO.StoredProcedure -ArgumentList $db, $sprocName
你可以设置存储过程对象的一些属性,如是否加密。
$sproc.IsEncrypted = $true
如果定制了TextMode = $true,你需要自己创建存储过程的头部。如果你有参数,这些将会在你的文本头部被定义,例如:
$sproc.TextMode = $true $sproc.TextHeader = @" CREATE PROCEDURE [dbo].[uspGetPersonByLastName] @LastName [varchar](50)
否则,如果TextMode = $false,技术上允许PowerShell自动生成头部,基于你给定的其他属性和参数设置。你也需要逐一创建参数对象并将它们添加到存储过程中。
$sproc.TextMode = $false $paramtype = [Microsoft.SqlServer.Management.SMO. Datatype]::VarChar(50); $param = New-Object -TypeName Microsoft.SqlServer.Management.SMO. StoredProcedureParameter -ArgumentList $sproc,"@LastName",$paramtype $sproc.Parameters.Add($param)
当创建存储过程时,使用字符串设置存储过程对象的TextBody属性定义。
$sproc.TextBody = @" SELECT TOP 10 BusinessEntityID, LastName FROM Person.Person WHERE LastName = @LastName
一旦头部信息、定义和存储过程属性就位,你可以调用Create方法,将CREATEPROC语句发送到SQL Server,并创建存储过程。
# Create the stored procedure on the instance of SQL Server. $sproc.Create()
【云原生】SQL(及存储过程)跑得太慢怎么办? SQL作为目前最常用的数据处理语言,广泛应用于查询、跑批等场景。当数据量较大时,使用SQL(以及存储过程)经常会发生跑得很慢的情况,这就要去优化SQL。
【Sql Server】存储过程通过定时执行添加记录作业 通过上篇了解了什么是存储过程,创建存储过程的方法,以及调用存储过程的方法 本次将通过数据库中的作业功能,进行定时执行存储过程,这样就可以完成我们刚开始假设的场景
【Sql Server】存储过程通过作业定时执行按天统计记录 通过前两篇文章的学习,我们已经对创建表、存储过程、作业等功能点有所了解 本次将结合前面所学习的知识点,创建统计表以及结合作业定时按天以及实时统计域名各个长度的记录值
【Sql Server】存储过程的创建和调用,随机添加域名记录 假设有这样一个场景 创建一个储存过程A,它执行添加一条随机产生3到8位长度的域名记录,通过定时器T1每隔1秒执行一次存储过程A 创建另一个存储过程B,它执行统计域名的长度3到8的记录数,通过定时器T2每隔1秒执行一次存储过程B
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
第十二届 BigData NoSQL Meetup — 基于hbase的New sql落地实践 立即下载
相关文章
- 在eclipse中构建Pentaho BI Server工程
- SQL SERVER数据库开发必备技能实战
- SQL Server数据库高级进阶之锁实战演练
- .NET Core基于SQL Server数据库主从同步实现读写分离实战演练
- 如何在windows server 2008上配置NLB群集
- SQL Server死锁
- C# 连接SQL Server数据库的几种方式--server+data source等方式
- SQL Server数据库附加失败错误:5123,拒绝访问
- SQL server 常用的数据库 DDL语言
- Windows Server 2008 下ASP程序连接ORACLE数据库驱动错误
- 【转载】SAP_ECC6.0_EHP4或SAP_ECC6.0_EHP5_基于Windows_Server_2008R2_和SQL_server_2008下的安装
- 使用SharePoint Designer 2010 设计BDCin SharePoint Foundation Server
- Wing FTP Server与mysql数据库整合
- Sql Server的日期格式化常用函数
- SQL SERVER全面优化-------Expert for SQL Server 诊断系列
- 获取sql server与年、季度、月、周首尾有关的时间函数
- Sql Server数据库中的更新表名、列名、列值
- 【已解决】Mongodb启动报错:about to fork child process, waiting until server is ready for connections.
- SQL Server 查找空值
- SQL Server Profiler工具
- MySQL----JDBC无法连接数据库,报The driver has not received any packets from the server的解决办法
- 2022国赛18:windows server 设置FTP域用户隔离