2016-06-29 11 views
0

Ich verwende den folgenden Befehl in SQL Powershell, um CSV von Daten zu generieren, die von SQL zurückgegeben werden.Invoke-Sqlcmd funktioniert nicht in SQL

Invoke-Sqlcmd -Query "myp" -ServerInstance "." | Export-Csv -Path "d:\data\MyDatabaseSizes.csv" -NoTypeInformation 

Der obige Befehl funktioniert einwandfrei in SQL Power Shell. aber als ich versuchte, in von SQL zu laufen mit dem folgenden Code

DECLARE @cmd varchar(1000) 
SET @cmd = 'Invoke-Sqlcmd -Query "myp" -ServerInstance "." | Export-Csv -Path "d:\data\MyDatabaseSizes.csv" -NoTypeInformation' 
EXEC xp_cmdshell @cmd 

geben Fehler, dass

‚Invoke-Sqlcmd‘ nicht als interner oder externer Befehl erkannt wird,

jemand bitte helfen Ich bei der Ausführung des Befehls von SQL.

Dank

+0

Problem .. gleiche Fehlern –

+0

Leider meinem schlechten entkommen sein, nachdem nun dort powershell.exe am Anfang Hinzufügen ist ein weiterer Fehler 'Export-Csv' wird nicht als interner oder externer Befehl erkannt, –

Antwort

0

xp_cmdmshell führt Windows-Shell-Befehle, nicht Powershell-Befehle. Sie können Powershell natürlich rufen Sie aus dem Windows-Shell, zum Beispiel wie folgt aus:

DECLARE @cmd varchar(1000) 
SET @cmd = 'Invoke-Sqlcmd -Query ''myp'' -ServerInstance ''.'' ^| Export-Csv -Path ''d:\data\MyDatabaseSizes.csv'' -NoTypeInformation' 
EXEC xp_cmdshell 'powershell.exe -c "' + @cmd + '"' 

Beachten Sie, dass:

  • ich die doppelten Anführungszeichen in der Powershell-Befehl mit einfachen Anführungszeichen ersetzt (entkam für SQL) Also kann ich im Windows-Befehl doppelte Anführungszeichen verwenden. Wenn Sie doppelte Anführungszeichen in der PowerShell benötigen, sollten Sie das PowerShell-Skript besser in einer Datei speichern, um all dies zu vermeiden. Sie benötigen möglicherweise auch weitere Parameter (z. B. zum Festlegen der Ausführungsrichtlinie). This MSDN page hat mehr Hilfe zu Powershell-Befehlszeilenoptionen
  • Pipe-Zeichen in der Befehlszeile müssen Argumente mit ^
+0

Hallo, Wenn ich den obigen Code in SQL ausführen gibt es Fehler 'Export-Csv' wird nicht als interner oder externer Befehl erkannt, –

+0

Sie benötigen Pipes in der Befehlszeile (wenn sie nicht tatsächlich als Shell-Pipe verwendet werden) mit einem Caret zu verlassen. – aucuparia

+0

Entschuldigung dafür, dass ich so ein Noob bin. Aber wenn ich deine Abfrage ausführe, habe ich | Charakter. Und in der dritten Zeile gab es einen Fehler bei der Verkettung. Bitte helfen Sie können mir bitte eine funktionierende Anfrage erstellen Danke –