繁体   English   中英

从Powershell运行SQL Server命令?

[英]Running SQL Server commands from Powershell?

我正在编写Powershell脚本来使用SQL Server自动化某些操作,其中一部分需要以管理员身份将本地帐户添加到数据库中。

create login [MYDOMAIN\myusername] from windows
go

sp_addsrvrolemember [MYDOMAIN\myusername], 'sysadmin'
go

这需要通过提升的sqlcmd命令运行。

我是Powershell和SQL Server的新手,所以谢谢您的帮助。

您正在寻找Invoke-Sqlcmd cmdlet

将SQL Server命令(以下命令)保存在文件中,并将其另存为SQLInput.sql

create login [MYDOMAIN\myusername] from windows
go

sp_addsrvrolemember [MYDOMAIN\myusername], 'sysadmin'
go

然后,您可以使用Run As Administrator身份Run As Administrator来运行PowerShell命令提示符,并运行以下命令,如下所示:

Invoke-Sqlcmd -InputFile "C:\SQLInput.sql" | Out-File -filePath "C:\SQLOutput.rpt"

编辑:

您可以使用-Query选项以类似方式内联运行查询

Invoke-Sqlcmd -Query "create login [MYDOMAIN\myusername] from windows;"

捕获响应是为了确保查询是否成功运行。 您可以使用-AbortOnError开关; 错误时中止命令。

否则,您可以使用Try .. Catch .. Finally在PowerShell中像

Try
 {
   Invoke-Sqlcmd -Query "create login [MYDOMAIN\myusername] from windows;"
 }

Catch
 {
  [system.exception]
  "caught a system exception"
 }

Finally
 {
  "end of script"
 }

此处阅读有关Powershell中异常处理的更多信息

PowerShell提供了一些流行的TSQL选项

  • 调用SqlCmd2
    • 下载点源功能
    • +约400行中基于.NET的灵活,便携式TQSL功能
    • +简单的参数化查询
    • +可选的DBNull到Null的有效转换(PowerShell中预期的数据行为)
    • -不是Microsoft的官方Cmdlet
    • -不支持'Go'语句


  • 调用SqlCmd
    • 下载并安装最新的SQL Feature Pack (通常向后兼容)。 尤其是:
      • SQLSysClrTypes
      • 共享管理对象
      • PowerShell工具
    • 或者,将管理工具与SQL一起安装
    • +微软官方Cmdlet
    • -不支持参数化查询(或糟糕透顶-为此使用“变量”参数吗?)
    • -已知是越野车。 自SQL 2014 CTP起, 仍然存在一些错误已得到解决


  • .NET-System.Data.SqlClient
    • 在MSDN中搜索各种类。 这个网站上有很多例子。
      • System.Data.SqlClient.SQLConnection
      • System.Data.SqlClient.SqlCommand
      • System.Data.DataSet
      • System.Data.SqlClient.SqlDataAdapter
    • +便携式
    • +强大
    • -不像Cmdlet或函数那么简单
    • -读者可能会发现您的代码不太清楚
    • -如果您有特定的利基需求会有所帮助,但可重复使用的代码(例如Invoke-SqlCmd2)会更有效


  • sqlcmd.exe
    • 如果您确实要调用它,则可以从PowerShell中调用它。 您可能会发现-%的帮助...


与Invoke-SqlCmd2一起使用的示例(通常是TSQL的go命令):

Invoke-Sqlcmd2 -ServerInstance SomeInstance -Database SomeDatabase -Query "create login [MYDOMAIN\myusername] from windows;"


附带说明一下,请确保签出SQL SMOSQLPSX

  • SQL SMO非常适合用于SQL的自动化和控制,尽管您需要习惯使用.NET。 很多可用资源,只需谷歌搜索您想做什么,然后使用“ SQL SMO PowerShell”
  • SQLPSX通常使用.NET和SMO库,提供行为类似于Cmdlet的更加用户友好的功能。 不幸的是,这似乎是一个无效的项目,并且其中一些材料已过时。 这是其中一位贡献者入门的好帖子

    祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM