设为首页 加入收藏

TOP

PowerShell 连接SQLServer数据库执行DML,DDL,DCL操作
2017-10-11 16:17:57 】 浏览:9151
Tags:PowerShell 连接 SQLServer 数据库 执行 DML DDL DCL 操作

 本位出处:http://www.cnblogs.com/wy123/p/6426261.html 

 

正如ADO.NET连接至数据执行增删查改操作一样,PowerShell 也可以连接SQLServer数据库,执行性增删查改功能,除此之外,PowerShell还可以执行DDL和DCL操作,另外就是支持DDL+DML+DCL的事务性操作,也就说PowerShell执行T-SQL的时候,可以将DDL+DML+DCL作为一个事物处理

 

PowerShell执行DML操作

新增操作

执行完之后来数据库中确认

 

修改

 

删除

 

   

      查询操作,首先在数据库中插入两条记录

在PowerShell中遍历读取表中的记录,读取数据的时候,不支持GO,加上GO提交符会报错? 不太熟悉PowerShell,熟悉的朋友可以指点一下,谢谢。

 

PowerShell执行DDL和DML操作

 与ADO.NET不同的是PowerShell可以执行DDL和DCL操作,这里以创建一个表并且授权给Test用户为示例

cls
$serverInstance="localhost\sqlserver2014A" #SQL Server实例名

$strSql = "
            USE TestDB
            GO
            CREATE TABLE TestDMLByPS
            (
                Id int,
                Name varchar(100)
            )
            GO
            
            GRANT SELECT ON TestDMLByPS TO Test
            GO
           "

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null  #加载程序集Microsoft.SqlServer.ConnectionInfo
$ServerConnection =new-object Microsoft.SqlServer.Management.Common.ServerConnection $serverInstance
try
{
    $ServerConnection.Connect()
    $ServerConnection.ExecuteNonQuery($strSql) 
}
Catch
{
    throw
}

  创建了TestDMLByPS表

  

  同时执行的DCL语句也生效了

  

PowerShell事务性操作

  将一个DML操作和一个DDL操作放在一个事物中执行,如果DDL创建的表不存在,则两个SQL可以成功执行

  

  将一个DML操作和一个DDL操作放在一个事物中执行,如果DDL创建的已经存在,那么DDL执行失败,那么DML执行的删除操作也失败,这一次删除操作换一个存在的Id,提示异常,事物回滚

   

  可以发现,DML执行的删除也一并回滚,并没有删除掉Id=2的记录

  

  与ADO.NET不同的是,PowerShell执行的事物可以包括DML和DDL或者DCL等操作

 

  最后附上操作脚本 

cls
$serverInstance="localhost\sqlserver2014A" #SQL Server实例名

$strSql1 = "USE TestDB
           GO
           CREATE TABLE T1(ID INT,VAL VARCHAR(50))
           GO"
$strSql2 = "USE TestDB
           GO
           INSERT INTO T2 VALUES (1,'TestPowerShell')
           GO"
$strSql3 = "USE TestDB
           GO
           UPDATE T2 SET Name = 'Test Update by PowerShell' WHERE ID = 1
           GO"
$strSql4 = "USE TestDB
           
           SELECT * FROM T2
           "

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null  #加载程序集Microsoft.SqlServer.ConnectionInfo
$ServerConnection =new-object Microsoft.SqlServer.Management.Common.ServerConnection $serverInstance

try
{
    $ServerConnection.Connect()
    #打开事务
    $ServerConnection.BeginTransaction()
    
    #执行DDL语句
    $ServerConnection.ExecuteNonQuery($strSql1)
    #执行DML语句
    $ServerConnection.ExecuteNonQuery($strSql2)
    #执行DML语句
    $ServerConnection.ExecuteNonQuery($strSql3)
    #执行DML语句,遍历查询结果

    $sqlReader = $ServerConnection.ExecuteReader($strSql4)
    $Datatable = New-Object System.Data.DataTable
    $DataTable.Load($SqlReader)
    for ($i=0;$i -le $DataTable.Rows.Count;$i++)
    {
        Write-Host 'value is : ' + $i + ' ' + $DataTable.Rows[$i][0]
        Write-Host 'value is : ' + $i + ' ' + $DataTable.Rows[$i][1]
    }
    
    #提交事务
    $ServerConnection.CommitTransaction()
}
Catch
{
    if ($ServerConnection.TransactionDepth -gt 0)
    {
        $ServerConnection.RollbackTransaction()
    }
    throw
}

 

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Windows Server 2003下配置IIS6.0.. 下一篇PHP绿色集成环境在云服务器上的应..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目