SQLCMD - Ausgabe in Datei nur bei Ergebnis größer 0
Hallo,
ich bin neu hier und habe schon einiges sinnvolles hier gefunden. Danke!
Allerdings habe ich zu einem Problem nichts finden können, vielleicht hatte das schon jemand:
Ich habe eine Batch-Datei geschrieben, die eine SQL-Datenbankabfrage (SQL Server Express 2005) vornimmt und in eine Datei ausgibt. Das funktioniert auch soweit.
1. wie kann ich die Ausgabe von "(X Zeilen betroffen)" verhindern?
2. wie kann ich verhindern, dass die Ausgabedatei auch dann erzeugt wird, wenn die Abfrage Null Zeilen als Ergebnis liefert?
Hintergrund ist der, dass die Batchdatei per Taskplanung im 30s - Takt gestartet werden soll. Das wären dann ja 2880 Dateien, von denen vielleicht nur 5 einen brauchbaren Inhalt haben.
Hat da jemand vielleicht nen Tipp?
Vielen Dank und liebe Grüße!
albossum
ich bin neu hier und habe schon einiges sinnvolles hier gefunden. Danke!
Allerdings habe ich zu einem Problem nichts finden können, vielleicht hatte das schon jemand:
Ich habe eine Batch-Datei geschrieben, die eine SQL-Datenbankabfrage (SQL Server Express 2005) vornimmt und in eine Datei ausgibt. Das funktioniert auch soweit.
1. wie kann ich die Ausgabe von "(X Zeilen betroffen)" verhindern?
2. wie kann ich verhindern, dass die Ausgabedatei auch dann erzeugt wird, wenn die Abfrage Null Zeilen als Ergebnis liefert?
Hintergrund ist der, dass die Batchdatei per Taskplanung im 30s - Takt gestartet werden soll. Das wären dann ja 2880 Dateien, von denen vielleicht nur 5 einen brauchbaren Inhalt haben.
Hat da jemand vielleicht nen Tipp?
Vielen Dank und liebe Grüße!
albossum
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 130473
Url: https://administrator.de/contentid/130473
Ausgedruckt am: 22.11.2024 um 16:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo albossum,
Auslesen einzlner Zeilen aus einem TXT File mittels Batch kannst du dir dein Batchfile anpassen und mittels "delim" oder "token" die Sachen rausfiltern, die du nicht benötigst.
Gruss
Tsuki
Auslesen einzlner Zeilen aus einem TXT File mittels Batch kannst du dir dein Batchfile anpassen und mittels "delim" oder "token" die Sachen rausfiltern, die du nicht benötigst.
Gruss
Tsuki
Moin,
@tsuki:
Ein Schleifchen finde ich da aber arg übertrieben - genauso wie den Ansatz alle 30 sekunden ein SQL Statement loszujagen - in der Hoffnung ein neuer Datensatztreffer ist dabei.
@ albossum:
Du mußt nicht nur Ross sondern auch Reiter nenen - deine Batch - am liebsten in Blöcken.
Mittels:
Könntest du - wenn wir deinen Weg weitergehen - "Problem 1" umschiffen.
2) Tja - dazu müßte man die Abfrage kennen..
Gruß
@tsuki:
Ein Schleifchen finde ich da aber arg übertrieben - genauso wie den Ansatz alle 30 sekunden ein SQL Statement loszujagen - in der Hoffnung ein neuer Datensatztreffer ist dabei.
@ albossum:
Du mußt nicht nur Ross sondern auch Reiter nenen - deine Batch - am liebsten in Blöcken.
Mittels:
find /v "Zeilen betroffen" "meine sql ausgabe.xyz" > "meine SQL Ausgabe.xyz"
Könntest du - wenn wir deinen Weg weitergehen - "Problem 1" umschiffen.
2) Tja - dazu müßte man die Abfrage kennen..
Gruß
Hallo Timo,
das habe ich mir heute morgen auch gedacht, nur wollte ich nicht den ersten Advent zu arg angehen und von daher meine "profane" und allgemeine Antwort
Warten wir mal auf die Antwort vom TO
Einen schönen 1.Advent
Tsuki
Du mußt nicht nur Ross sondern auch Reiter nennen - deine Batch - am liebsten in <code > - </ code> Blöcken.
das habe ich mir heute morgen auch gedacht, nur wollte ich nicht den ersten Advent zu arg angehen und von daher meine "profane" und allgemeine Antwort
Warten wir mal auf die Antwort vom TO
Einen schönen 1.Advent
Tsuki
Hallo albossum,
zu 1.: Ein "set nocount on" am Anfang Deines Skriptes verhindert die Ausgabe der Anzahl der betroffenen Zeilen.
zu 2.: Die Ausgabe ganz unterbinden dürfte nicht funktionieren (wenn doch, dann vielleicht über den SQLCMD-Befehl ":out"), aber das SQL-Skript kann Dir zurückgeben, ob Daten gefunden wurden und dementsprechend kannst Du die Datei dann löschen. Das würde dann so aussehen:
Batch:
Skript:
Der Parameter "-b" sorgt dafür, daß SQLCMD mit errorlevel 1 beendet wird, wenn ein Fehler > 10 auftritt. Mit der Zeile "if @@rowcount = 0 raiserror (0, 11, 0)" sorgen wir dafür, daß eben das passiert, wenn keine Daten zurückgegeben werden. Nach dem SQLCMD wird dann auf den errorlevel geprüft und ggf. eine leere Datei gelöscht.
Gruß, Mad Max
zu 1.: Ein "set nocount on" am Anfang Deines Skriptes verhindert die Ausgabe der Anzahl der betroffenen Zeilen.
zu 2.: Die Ausgabe ganz unterbinden dürfte nicht funktionieren (wenn doch, dann vielleicht über den SQLCMD-Befehl ":out"), aber das SQL-Skript kann Dir zurückgeben, ob Daten gefunden wurden und dementsprechend kannst Du die Datei dann löschen. Das würde dann so aussehen:
Batch:
SQLCMD -U %benutzername% -P %passwort% -S %server% -d %datenbank% -i %arbeits_sql% -o %datei% -W -s "|" -h -1 -b
if errorlevel 1 del %datei%
Skript:
set nocount on
SELECT
Referenz,
Kundennummer,
Name,
Strasse,
PLZ,
Ort,
Land,
Email
FROM
Addresses
WHERE
Flag = -1
if @@rowcount = 0 raiserror (0, 11, 0)
Der Parameter "-b" sorgt dafür, daß SQLCMD mit errorlevel 1 beendet wird, wenn ein Fehler > 10 auftritt. Mit der Zeile "if @@rowcount = 0 raiserror (0, 11, 0)" sorgen wir dafür, daß eben das passiert, wenn keine Daten zurückgegeben werden. Nach dem SQLCMD wird dann auf den errorlevel geprüft und ggf. eine leere Datei gelöscht.
Gruß, Mad Max
Hey, habe die gleiche Idee gehabt, mir eine Batch geschrieben welche die SQL Abfrage startet.
Nun ist meine Frage, ob man diese Batchdatei die ja den Benutzername und Passwort enthält noch irgendwie schützen kann.
Zwar liegt diese Datei auf einem Server wo keiner Zugriff, außer dem Admin, aber wo ein Wille ist, ist auch ein Weg.
Habt ihr eine Idee oder mach ich mir da zu viele Sorgen?
Nun ist meine Frage, ob man diese Batchdatei die ja den Benutzername und Passwort enthält noch irgendwie schützen kann.
Zwar liegt diese Datei auf einem Server wo keiner Zugriff, außer dem Admin, aber wo ein Wille ist, ist auch ein Weg.
Habt ihr eine Idee oder mach ich mir da zu viele Sorgen?