Variable um Dos Scripte auszuführen

Variable um Dos Scripte auszuführen

  • SQL Script

  • Variable


Die Ergebnisse sind erst nach der Abstimmung sichtbar.

radiomagazin

Benutzer
Beiträge
19
Ich lese aus der Tabelle "Documents" die maximale Zeilenanzahl aus.

Weiß Jemand wie ich diese als Variable speichern kann um unten den Wert bei @max zu setzen ???

Würde dies nutzen wollen um verzeichnisse nach dem Schema "MD c:\" + @max zu erstellen.



SELECT
sys.objects.[name], sys.dm_db_partition_stats.row_count
FROM sys.objects INNER JOIN sys.dm_db_partition_stats
ON sys.dm_db_partition_stats.OBJECT_ID = sys.objects.OBJECT_ID
WHERE sys.objects.name = 'Documents' and index_id = '0'
go


DECLARE @cnt INT = 0;
DECLARE @max INT = 6;
WHILE @cnt < @max
BEGIN
PRINT @cnt;
SET @cnt = @cnt + 1;
--BEGIN TRAN IF @@ROWCOUNT = 0 PRINT 'Something went wrong!' ELSE PRINT 'alles ok' ROLLBACK
END;
PRINT 'Erledigt';
GO
 
Werbung:
Es ist schwer die Frage zu verstehen.
Du möchtest aus einer SQL Abfrage Ordner erstellen und weißt nicht, wie du an das Ergebnis in der Windows Shell kommst?

Hier hast du im Prinzip zwei Möglichkeiten. Aus SQL rufst du Shell Funktionen aus, was man aus Sicherheitsgründen nicht machen sollte.
Die Andere Möglichkeit wäre aus der CMD (besser aus Powershell) SQL abzusetzen.

EDIT:
Mit Beispielen:
Invoke-Sqlcmd (SqlServer)
 
Nein so war es nicht gemeint. In der oberen SQL Abfrage wird angezeigt wieviele Zeilen es in der Tabelle gibt (in meinem Beispiel ein paar tausend).
In der 2. Abfrage wird von Zeile 1 -6 durch gegangen und die aktuelle Zeilenanzahl angezeigt.

Ich möchte eigentlich aus einer Tabelle mit 1000 zeiten (je nach der maximalen Anzahl der Tabelle,
Aus dem Feld "Name" den Wert herausnehmen also (Beispiel Zeile 1 Wert Name: Name1, Zeile 2 Wert Name: Name2), ....

Und danach (da weiß ich wie das geht mittel MD (make directory) dieses Verzeichnis anlegen lassen
Also in dem Beispiel: wenn (Pfad existiert; ""; md c:\Dokumente\Name1) usw.....

Also anhand der Maximalzahlen alle Tabellen durchgehen, Wert auslesen und Directory anlegen !

Hoffe es ist klarer geworden. VLG Ingo
 
erzeuge einfach via SQL ein Ergebniss, was die einzelnen Befehle enthält. Das speicherst du als Datei ab und führst das aus (shell, batch-script). Ich nix Windows, Dos & SQL-Server, aber so würde ich es in *NIX machen.
 
Na das ist nicht das was ich will !!!

Ich möchte per SQL Script die maximale Zeilenanzahl einer Tabelle "Documente" auslesen, dann aus Jeder Zeile den Wert des "Namens" auslesen und dann mittels dieses Wertes das Dosscript aufrufen. Ich finde es gut wenn andere es anders machen würden, das hilft mir aber nicht, weil ich es in SQL machen muss da dies nur ein Tel des ganzen ist. Also ich hoffe es kann mir noch einer mit Know How Input helfen.
 
Dann viel Erfolg. Typischerweise hast Du aus SQL heraus keinen Zugriff auf Dinge des unterliegenden Betriebsystems, und das ist auch gut so. Mag sein, daß Kleinweich da mit dem M$SQL-Server das anders sieht (wie so vieles und so oft), ändert nichts daran, daß es eine dumme Idee ist. Nur mal so: irgendwann schlägt die Erstellung eines Verzeichnisses fehl, das SQL bekommt ein ROLLBACK - und die bisher angelegten Verzeichnisse liegen dann als Leichen rum. Viel Spaß.
 
Also ganz ehrlich warum interessiert es dich, was ich machen will, wenn du mir schon nicht grundsätzlich behilflich sein willst / kannst die Schleife richtig zu generieren ??? Finde ich schade wenn ich auf Experten zähle die mir eine Hilfestellung bieten sollten und dann nur zu hören kriege was ich anders machen sollte... und sei es nur um zu verstehen was ich im Loop falsch mache bzw. wie ich die Variable gesetzt bekomme. Schade, aber dann brauch man solche Foren nicht.
 
ich glaube, du hast ein prinzipielles Verständnissproblem mit dieser Welt: 'Experten' sind nicht dazu da, die Meinung eines 'Nichtexperten' zu bestätigen. EOD.
 
Na das ist nicht das was ich will !!!

Ich möchte per SQL Script die maximale Zeilenanzahl einer Tabelle "Documente" auslesen, dann aus Jeder Zeile den Wert des "Namens" auslesen und dann mittels dieses Wertes das Dosscript aufrufen. Ich finde es gut wenn andere es anders machen würden, das hilft mir aber nicht, weil ich es in SQL machen muss da dies nur ein Tel des ganzen ist. Also ich hoffe es kann mir noch einer mit Know How Input helfen.

Das habe ich doch schon gesagt, welche Möglichkeiten du hast. Entweder du rufst DOS Befehle / Scripte aus dem SQL aus (schlechte Idee) oder du rufst aus DOS (eher CMD, besser wäre Powershell) das SQL auf und hast dann im Script die Inhalte deiner SQL Abfrage und kannst damit weiterarbeiten (Ordner erstellen).
 
Hier mal ein Beispiel mit Powershell. Es muss das Modul "SqlServer" (Install-Module SqlServer) installiert sein.

Code:
Invoke-Sqlcmd -ServerInstance srv-sql1 -Database Test -Query "SELECT * FROM Documents"
ID Name
-- ----
 2 Test1...
 3 Test2...
 4 Test3...
 5 Test4...
 6 Test5...

Und das ganze mit Ordner erstellen:
Code:
Invoke-Sqlcmd -ServerInstance srv-sql1 -Database Test -Query "SELECT * FROM Documents"|%{ New-Item -Type Directory $_.Name }

Lesbarer statt % (In Powershell ist das ein Alias für foreach) wäre:
Code:
foreach($line in (Invoke-Sqlcmd -ServerInstance srv-sql1 -Database Test -Query "SELECT * FROM Documents")){ New-Item -Type Directory $line.Name }
 
Sorry, aber ich vermute mal ihr habt mich echt nicht verstanden. Ja ich habe verstanden dass es anders geht, aber ich möchte wissen,
wie ich solch einen Loop aufgebaut bekomme:

1.) Aber ich möchte gerne die Anzahl der Zeilen Aus der Tabelle auslesen, diesen in der Variablen @Lines
2.) Dann aus der Zeile 1 der Tabelle "Documents" den eingetragen Wert in der Spalte "Name" als Variable "@XYZ" auslesen,
3.) diese Variable "@XYZ" nutzen um das Verzeichnis mittels "exec xp_cmdshell 'md c:\dokumenre' + @XYZ;" zu erstellen und danach
4.) zu 2.) springen, solange bis die letzte Zeile von @Lines erreicht ist.
 
Was ist dein endgültiges Ziel? Du willst doch Ordner Erstellen, mit Namen, die in der Tabelle "Documents" stehen?
Vergiss in dem Fall die Loops, die Variablen und xp_xmdshell!

Wenn das nicht der Fall ist, erläutre das Ziel und nicht der Zwischenschritt, an dem du hängst.
 
Werbung:
Das Ziel ist es dass ich Hilfe brauche um das hinzubekommen, was ich möchte und nicht um irgendetwas was andere anders machen. Ich wiederhole mich ungern, ich möchte den Loop erstellen und das dann so umsetzen und dies als Muster für weitere anfragen verwenden können:

1.) Aber ich möchte gerne die Anzahl der Zeilen Aus der Tabelle auslesen, diesen in der Variablen @Lines
2.) Dann aus der Zeile 1 der Tabelle "Documents" den eingetragen Wert in der Spalte "Name" als Variable "@XYZ" auslesen,
3.) diese Variable "@XYZ" nutzen um das Verzeichnis mittels "exec xp_cmdshell 'md c:\dokumenre' + @XYZ;" zu erstellen und danach
4.) zu 2.) springen, solange bis die letzte Zeile von @Lines erreicht ist.
 
Zurück
Oben