从Powershell运行SQL Server命令?

时间:2014-09-30 18:35:05

标签: sql sql-server powershell

我正在编写一个Powershell脚本来自动化SQL Server,其中一部分需要将我的本地帐户作为管理员添加到数据库中。

create login [MYDOMAIN\myusername] from windows
go

sp_addsrvrolemember [MYDOMAIN\myusername], 'sysadmin'
go

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

我是Powershell和SQL Server的新用户,非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您正在寻找Invoke-Sqlcmd cmdlet

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

create login [MYDOMAIN\myusername] from windows
go

sp_addsrvrolemember [MYDOMAIN\myusername], 'sysadmin'
go

然后,您可以使用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;"

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

否则,您可以在PowerShell中使用Try .. Catch .. Finally构造,如

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

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

Finally
 {
  "end of script"
 }

详细了解Powershell Here

中的异常处理

答案 1 :(得分:0)

PowerShell有一些流行的TSQL选项

  • 调用-SqlCmd2
    • Download and dot source the function
    • +基于.NET的灵活便携式TQSL功能,约400行
    • +简单的参数化查询
    • + DBNull的可选有效转换为Null(PowerShell中预期的数据bahaves)
    • - 不是Microsoft的官方Cmdlet
    • - 不支持' Go'声明


  • 调用-SQLCMD
    • 下载并安装the latest SQL Feature pack(通常向后兼容)。特别是:
      • SQLSysClrTypes
      • 共享管理对象
      • PowerShellTools
    • 或者,安装管理工具和SQL
    • + Microsoft官方Cmdlet
    • - 不支持参数化查询(或者糟糕的不确定 - 是'变量'参数?)
    • - 众所周知。从SQL 2014 CTP开始,有still bugs being addressed


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


  • sqlcmd.exe
    • 如果您真的想要调用它,可以从PowerShell调用它。您可能会发现 - %help ...


使用Invoke-SqlCmd2的示例(通常是我的TS命令):

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。不幸的是,这似乎是一个死的项目,有些材料已经过时了。 Here's a good post由其中一位撰稿人开始。

    祝你好运!