Ich versuche, einige sqlcmd über T-SQL auf SQL Server 2008 auszuführen. Es gibt einen Teil meines Codes, wo ich eine Datendateigröße und ob diese Dateigröße überprüfen ist nicht gleich 0, dann starten Sie die spezifische Tabelle zu löschen, damit ich BCP in neuen Daten kann.Kombinieren Sie die Befehlszeile und T-SQL - SQL Server
Unten ist mein Code, der nicht ausgeführt wird:
SET @myVariable = '
SETLOCAL
FOR %%R IN (X:\Main Folder\Data\'[email protected]+'_'[email protected]+'.dat) DO SET size=%%~zR
IF %size% NEQ 0 (
SQLCMD -E -S my-server-name -Q "DELETE FROM '[email protected]+'.'[email protected]+'.'[email protected]+';" >> X:\Main Folder\Log\Log.txt
)'
EXEC master..xp_cmdshell @myVariable
Aus irgendeinem Grund, wenn ich meine gespeicherte Prozedur ausführen, scheint der Code oben zu überspringen, weil es keine Fehlermeldungen nicht zurückschießen.
EDIT: Nach der Anpassung der Abstand und mein Code, @ myVariable, wird jetzt ausgeführt. Es funktioniert jedoch immer noch nicht in Bezug darauf, dass es immer noch die Tabelle löscht, obwohl die Datendateigröße = 0 ist. Wenn ich es jedoch innerhalb einer Batch-Datei fest programmiere, funktioniert es einwandfrei. Irgendwelche Ideen?
Warum Sie nicht über eine gespeicherte Prozedur zur Datenbank hinzufügen, dass Ihr Scheck tut und löschen oder kürzen. Dann führe dies über die Befehlszeile aus? –
Zitat um den Dateinamen? Sowohl in der 'for' als auch in der umgeleiteten Ausgabe. – shawnt00
Abhängig von Ihrer Konfiguration und der Versionsnummer von OS fehlt a/i nach IF. Probieren Sie IF/i. – Christian4145