Właśnie zacząłem dostawać moje stopy mokre z interakcją z SQL Serwerem używającym PowerShell i dostałem to zapytanie:
Do wykonywania dowolnej operacji bazy danych serwera sql, używanie obiektów opartych na architekturze .net jest moim preferowanym wyborem głównie z tego powodu, że pochodzę z tła C #. Na przykład:
$sqlCommand = New-Object System.Data.SqlClient.SqlCommand
Jednakże odkryłem, że możemy również użyć polecenia cmdlet Invoke-SqlCmd dostępnego w SqlServerCmdletSnapin100. Tak jak:
Add-PSSnapin SqlServerCmdletSnapin100
Set-Location SQLSERVER:sqlDatabaseInstancedatabasesTestDatabase
Invoke-SqlCmd -Query "SELECT * FROM [File]" -User "UserName" -Password "UserPassword"
Zastanawiasz się, dlaczego warto skorzystać z Invoke-SqlCmd zamiast obiektów opartych na architekturze .net?
Czy Invoke-SqlCmd został udostępniony przez PowerShell, ponieważ niektóre populacje nie znają platformy .net.
Lub
Czy są jakieś specjalne funkcje oferowane przez Invoke-SqlCmd, z których musimy go używać.
Proszę przewodnika.
Odpowiedzi:
2 dla odpowiedzi № 1Invoke-SqlCmd został udostępniony przezpowershell przez snapins, nie domyślnie. Wystarczy tylko wywołać skrypt sqlcmd.exe, który istniał przed wersją powershell, i był używany do wysyłania poleceń sql za pośrednictwem cmd. Teraz, gdy mamy bezpośredni dostęp do .Net, nie potrzebujemy tego.Nie ma nic, co Invoke-sqlcmd może zrobić, czego nie możesz zrobić z .Net, SqlClient zawsze będzie lepszym wyborem IMO, ponieważ jest szybszy i "Nigdy nie dostaniesz tego" innego zachowania ", o którym wspomina Microsoft.
http://technet.microsoft.com/en-us/library/ms162773.aspx
SQL Server Management Studio używa Microsoft.NET Framework SqlClient do wykonania w trybie zwykłym i SQLCMD w edytorze zapytań. Kiedy sqlcmd jest uruchamiany z wiersza poleceń, sqlcmd używa sterownika ODBC. Ponieważ mogą obowiązywać różne domyślne opcje, możesz zobaczyć inne zachowanie podczas wykonywania tego samego zapytania w SQL Server Management Studio w trybie SQLCMD oraz w narzędziu sqlcmd.