刚刚开始使用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是否提供了我们必须使用的特定功能。
请指导。
答案 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实用程序中。