34. PowerShell -- SQL Server的使用(2)

参考:

http://www.shangxueba.com/jingyan/105946.html

一、先不用SqlServerCmdletSnapin100这个SnapIn来写几个操作常用数据的脚本

1. 由于有读者问如何用PowerShell显示数据库中表,以下是一个简单函数供参考

#==============================================
# SQL Server 2008 - PowerShell
# 显示用户表
#zivsoft
#==============================================
function ShowCustomizedDataTable{
    $SQLSERVER=read-host "Enter SQL Server Name:"
    $Database=read-host "Enter Database Name:"
    $SqlConnection = New-Object System.Data.SqlClient.SqlConnection
    $CnnString = "Server=$SQLSERVER;Database=$DATABASE;Integrated Security=True"
    $SqlConnection.ConnectionString = $CnnString
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand
    $SqlCmd.CommandText = "select name from sysobjects where type=‘u‘"
    $SqlCmd.Connection = $SqlConnection
    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd
    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet)
    $SqlConnection.Close()
    $DataSet.Tables[0]
}

2. 显示SQL查询出来的数据

#==============================================
# SQL Server 2008 - PowerShell
# 显示查询数据内容
#zivsoft
#==============================================
function Get-DataTable([string]$query)
{
    $dataSet= new-object "System.Data.DataSet" "DataSetName"
    $da = new-object "System.Data.SqlClient.SqlDataAdapter" ($query, $CnnString)
    [void] $da.Fill($dataSet)
    return $dataSet.Tables[0]
}

3. 构建数据库联接字符串

################################################################################### ################
# www.zivsoft.com
# 设置数据库连接字符串
############################################################################################ #######
function global:Set-SqlConnection( $Server = $(Read-Host "SQL Server Name"), $Database = $(Read-Host "Default Database"),  $UserName , $Password  )
{
    #如果用户名和密码都不为空
    if( ($UserName -gt $null) -and ($Password -gt $null)) {
        $login = "User Id = $UserName; Password = $Password"
    }
    else {
        #采用整合安全机制登陆
        $login = "Integrated Security = True"
    }
    #数据库连接字符串
    $SqlConnection.ConnectionString = "Server = $Server; Database = $Database; $login"
}

4. 另一种风格的获取数据库数据

#================================================
# 类似DataTable GetDataTable(String strSQL)
#周利华
#================================================
function global:Get-SqlDataTable( $Query = $(Read-Host "输入SQL语句"))
{
    #打开数据库
    if (-not ($SqlConnection.State -like "Open")) { $SqlConnection.Open() }

    #实例化SQLCommand
    $SqlCmd = New-Object System.Data.SqlClient.SqlCommand $Query, $SqlConnection

    $SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
    $SqlAdapter.SelectCommand = $SqlCmd

    $DataSet = New-Object System.Data.DataSet
    $SqlAdapter.Fill($DataSet) | Out-Null

    $SqlConnection.Close()

    #返回数据库
    return $DataSet.Tables[0]
}

二、以上是普通PowerShell通过ADO.NET操作数据库,下面列出更酷的SQL Server集成的PowerShell命 令

先看一下Invoke-Sqlcmd这个关键的cmdlet的帮助信息:

NAME
    Invoke-Sqlcmd

SYNOPSIS
    Runs a script. containing statements from the languages (Transact-SQL and XQuery) and commands supported by the SQL Server sqlcmd utility.

    --------------  Example 1 --------------

    C:\PS>Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" - ServerInstance "MyComputer\MyInstance"

    This example connects to a named instance of the Database Engine on a computer and runs a basic Transact-SQL script.

    TimeOfQuery
    -----------
    10/7/2007 1:04:20 PM

    --------------  Example 2 --------------

    C:\PS>Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSqlCmd.sql" | Out-File -filePath "C:\MyFolder\TestSqlCmd.rpt"

    This example reads a file containing Transact-SQL statements and sqlcmd commands, runs the file, and writes the output to another file. Ensure all output files are secured with the appropriate NTFS permissions.

    Output sent to TestSqlCmd.rpt.

    --------------  Example 3 --------------

    C:\PS>$MyArray = "MYVAR1=‘String1‘", "MYVAR2=‘String2‘"
    Invoke-Sqlcmd -Query "SELECT `$(MYVAR1) AS Var1, `$(MYVAR2) AS Var2;" -Variable $MyArray

    This example uses an array of character strings as input to the -Variable parameter. The array defines multiple sqlcmd variables. The $ signs in the SELECT statement that identify the sqlcmd variables are escaped using the back-tick (`) character.

    Var1                        Var2
    ----                        ----
    String1                     String2

    --------------  Example 4 --------------

    C:\PS>Set-Location SQLSERVER:\SQL\MyComputer\MyInstance
    Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance (Get-Item .)

    This example uses Set-Location to navigate to the SQL Server PowerShell provider path for an instance of the Database Engine. Then the example uses Get-Item to retrieve an SMO Server object for use as the -ServerInstance parameter of Invoke-Sqlcmd.

    TimeOfQuery
    -----------
    10/18/2007 8:49:43 PM

    --------------  Example 5 --------------

    C:\PS>Invoke-Sqlcmd -Query "PRINT N‘abc‘" -Verbose

    This example uses the PowerShell -Verbose parameter to return the message output of the PRINT command.

    VERBOSE: abc

    --------------  Example 6 --------------

    C:\PS>Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks
    Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"

    This examples uses a positional string to supply the input to the -Query parameter. It also shows how Invoke-Sqlcmd uses the current path to set the database context to AdventureWorks.

    WARNING: Using provider context. Server = MyComputer, Database = AdventureWorks.

    DatabaseName
    ------------
    AdventureWorks

仔细读完这个帮助,发现,上面所有对.NET Framework中ADO.NET的操作全可以用Invoke-Sqlcmd代替 ,非常简洁方便。

比如,获取home数据中所有用户表:

Invoke-Sqlcmd -Query "use home;SELECT name as tablename from sysobjects where xtype=‘U‘" -QueryTimeout 3 | ft -auto

比如,显示home数据库中userinfo表内容:

Invoke-Sqlcmd -Query "use home;SELECT * from UserInfo" -QueryTimeout 3 | ft - auto

最后,补充,如果直接用SQL Server 2008的Management Studio进去打开PowerShell,便可以直接操 作类似Invoke-Sqlcmd的cmdlets,但是如果没有Management Studio怎么办呢?

很简单,用Add-PSSnapin SqlServerCmdletSnapin100轻松搞定。

时间: 2024-08-04 18:31:45

34. PowerShell -- SQL Server的使用(2)的相关文章

33. PowerShell -- SQL Server的使用

PowerShell --  SQL Server的使用 (1) 一.概述 SQL Server 2012 提供了一个名为 sqlps 的 Windows PowerShell 模块,该模块用于将 SQL Server 组件导入到 Windows PowerShell 2.0 环境或脚本中.sqlps 模块提供一组 SQL Server cmdlet ,支持各种操作,如运行包含 Transact-SQL 或 XQuery 语句的 sqlcmd 脚本. 二.加载模块 1.SQL Server 20

powershell玩转SQL SERVER所有版本

微软发布了最新的powershell for sql server 2016命令行客户端库.文章介绍了与之相关的实用方法. powershell 传教士 原创文章 2016-06-05,2016-06-30改 允许转载,但必须保留名字和出处,否则追究法律责任 powershell,sql server,2016,功能包,客户端,下载 powershell玩sql server就是比powershell玩mysql强! 问:那么问题来了,强在哪? 答:微软给我们做好了powershell+sqls

安装 SQL Server 2012 的硬件和软件要求(官方全面)

以下各节列出了安装和运行 SQL Server 2012 的最低硬件和软件要求. Hardware and Software Requirements (PowerPivot for SharePoint and Reporting Services in SharePoint Mode).' data-guid="ac62f277a77cf0fe4624123fb93d4313">有关 SharePoint 集成模式下 Analysis Services 的要求的详细信息,请参

使用Powershell管理Linux 下的 SQL Server

我们上一篇文章介绍了在Centos 7.3下安装及配置 SQL Server,今天我们主要介绍的是如何在Windows下使用Powershell来管理Linux下的SQL Server,其实说到Powershell大家都已经很熟悉了,Powershell不止是命令集合也是批量程序,可以很好的协助管理员提高日常的运维工作,但是微软的Powershell有一个毛病就是不同的服务需要安装不同的Powershell,对于Lync下的Shell.Exchange Shell和系统自带的Powershell

使用PowerShell 命令集进行SQL Server 2012 备份和还原

最近心相不错,所以打算翻译一些英文文档做福利,原文在此,翻译有不足的地方还请各位兄弟指点. 讨论什么是DBA最重要的工作的时候,你最常听到就是一条就是DBA只要做好备份和恢复.事实如此,如果你不做备份,或者无法保证你的备份能够有效恢复,你和你的公司就会处于数据丢失危险下. T-SQL 命令BACKUP DATABASE已经使用了相当长的一段时间(在这之前用的是DUMP DATABASE 命令,老人们都记得). 它仍然不失为备份数据库好方式.我们现在有一个新的方法来自动的做这些日常的备份处理任务.

PowerShell 导入 SQL Server 的 PS 模块

接触过UNIX或者Linux 的朋友都知道此类系统有着功能强大.无所不能的壳程序,称之为Shell.微软公司于2006年第四季度正式发布PowerShell,它的出现标志着, 微软公司向服务器领域迈出了重要的一步, 不仅提供简便的图形化操作界面,同时提供类似于Unix, Linux等操作系统中强大的Shell管理模式. 经过几年的努力,微软已逐步开发各服务器端产品对PowerShell 的支持.不懂PowerShell必将会被淘汰,今天我们就来看看SQL Server对PowerShell的支持

PowerShell:30行代码轻松实现SQL Server数据库容量监控

本文介绍如何用PowerShell脚本实现SQL Server数据库容量监控 闲话就不多说,直入主题 一.建表 为每台服务器创建一个表,用于记录服务器各个数据库的容量,以服务器名作为表名. CREATE TABLE table_name( [LOG_DATE] [varchar](20) NULL, [DB_NAME] [varchar](50) NULL, [TOTAL_SIZE_MB] [numeric](15, 2) NULL, [USE_SIZE_MB] [numeric](15, 2)

SQL Server中的事务日志管理(9/9):监控事务日志

当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会告诉你每个DBA应该知道的具体细节. 对于在我们关注下的所有数据库,在日志维护方面,我们的首要目标是最优化写性能,为了支持SQL Server写入日志的所有活动,包括数据修改,数据读取,索引维护等等.但是,留意下可能的日志碎片也是重要的,如前面文章介绍的,它会影响需要读取日志的过程性能,例如日志备份

SQL Server 2014 SP1 通过补丁KB3058865提供更新,SP1一文便知

Microsoft SQL Server 2014 SP1 更新: SQLServer2014SP1-KB3058865-architecture-language.exe 安装完成后版本 12.0.4100.1. 主要特性包如下: Microsoft® SQL Server® Backup to Windows® Azure® Tool Microsoft SQL Server Backup to Windows Azure Tool 支持备份到 Windows Azure Blob 存储,加