Invoke-SqlCmd与基于.Net Framework的Sql Server命令

时间:2014-04-02 14:42:34

标签: powershell-v2.0

刚刚开始使用PowerShell与SQL Server进行交互,并得到了这个查询:

对于执行任何sql server数据库操作,使用基于.net框架的对象是我的首选,主要是因为我来自C#background。例如:

$sqlCommand = New-Object System.Data.SqlClient.SqlCommand

但是,我发现我们也可以使用SqlServerCmdletSnapin100中提供的Invoke-SqlCmd cmdlet。为:

Add-PSSnapin SqlServerCmdletSnapin100
Set-Location SQLSERVER:\sql\DatabaseInstance\databases\TestDatabase
Invoke-SqlCmd -Query "SELECT * FROM [File]" -User "UserName" -Password "UserPassword" 

想知道,为什么要使用Invoke-SqlCmd而不是基于.net框架的对象?

Invoke-SqlCmd是通过PowerShell提供的,因为那里的一些人不熟悉.net框架。

Invoke-SqlCmd是否提供了我们必须使用的特定功能。

请指导。

1 个答案:

答案 0 :(得分:2)

Invoke-SqlCmd由snapins通过powershell提供,而不是默认情况下。它所做的只是调用在powershell之前存在的sqlcmd.exe,并用于通过cmd发送sql命令。现在我们可以直接访问.Net,但我们不需要它。没有什么Invoke-sqlcmd可以做到你无法做到的.Net,SqlClient永远是IMO的更好选择,因为它更快,你永远不会得到微软所指的“不同行为”。

http://technet.microsoft.com/en-us/library/ms162773.aspx

  

SQL Server Management Studio使用Microsoft .NET Framework   SqlClient在查询编辑器中以常规和SQLCMD模式执行。   从命令行运行sqlcmd时,sqlcmd使用ODBC驱动程序。   由于可能适用不同的默认选项,因此您可能会看到不同   在SQL Server Management中执行相同的查询时的行为   Studio在SQLCMD模式和sqlcmd实用程序中。