Variable um Dos Scripte auszuführen

Variable um Dos Scripte auszuführen

  • SQL Script

  • Variable


Die Ergebnisse sind erst nach der Abstimmung sichtbar.
Werbung:
Mein Ziel ist es eine qualitative Hilfe zu bekommen, die meine Frage beantwortet und nicht diskutieren zu muessen:

Ich habe verstanden dass du mir nicht helfen willst / kannst das umzusetzen was ich moechte daher meine Frage nochmals an alle anderen :

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.
 
Ich habe verstanden dass du mir nicht helfen willst / kannst das umzusetzen was ich moechte daher meine Frage nochmals an alle anderen :
Ich möchte schon helfen. Ich frage mich nur, warum es genau so sein soll und nicht wie ich vorgeschlagen habe? Ich habe sogar schon die Lösung geliefert wie man Ordner anhand der Daten einer Tabelle erstellt.
 
1. )Weil es so nucht funktioniert wie du es angegeben hast
2.) Weil die angeblich benoetigten Dinge scheinbar nicht mit Sql express installiert sind
3.) Weil ich bei zukuenftigen Dingen soegwas auch selber koennen moechte anhand meiner Aufgabenstellung und der angedachten Loesung
4.) Weil ich kein Tekki sondern Laienprogrammierer bin
5.) Weil ich verstehen will wie was funktioniert und 6.) einfach, weil ich es so moechte,

daher noch mal meine Frage an alle die mir ggf helfen koennten meon Problem auf mein Loesung mit meinem Ansatz um zu setzen:

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
 
Zuletzt bearbeitet:
1. )Weil es so nucht funktioniert wie du es angegeben hast
2.) Weil die angeblich benoetigten Dinge scheinbar nicht mit Sql express installiert sind
3.) Weil ich bei zukuenftigen Dingen soegwas auch selber koennen moechte anhand meiner Aufgabenstellung und der angedachten Loesung
4.) Weil ich kein Tekki sondern Laienprogrammierer bin
5.) Weil ich verstehen will wie was funktioniert und 6.) einfach, weil ich es so moechte,

daher noch mal meine Frage an alle die mir ggf helfen koennten meon Problem auf mein Loesung mit meinem Ansatz um zu setzen:
Dann empfehle ich Dir einfach mal ein T-SQL Buch zu lesen, einen Kurs zu machen oder einfach mal selbst auf die Suche durch die unendlichen Weiten des Internet zu gehen. Dort findest Du alles was du brauchst.
 
Und ob es funktioniert. Bin schon fast fertig. Muss nun nur noch den Make Dir Befehl einbauen:

-- Datenbank nach AA_Test kopieren und rownumber vergeben ###########################################################
Use Datenbank
DECLARE @RowNumber INT;
IF OBJECT_ID('AA_Test') IS NOT NULL DROP TABLE AA_Test -- Wenn Tabelle vorhanden, dann löschen
select *, ROW_NUMBER() OVER (ORDER BY guid) as RowNumber -- Rownummer vergeben und einfügen
INTO AA_Test FROM documents SET @RowNumber = @@ROWCOUNT; -- speichern in Tabelle AA_Test
-- Zeilennummer auslesen und Variable abarbeiten#####################################################################
declare @variable nvarchar(255);DECLARE @cnt INT = 1; DECLARE @max INT;
set @max = (select sum([rows]+1) from sys.partitions where object_id=object_id('AA_Test') and index_id in (0,1))+1; -- maximale Zeilenanzahl in @max speichern
WHILE @cnt < @max
BEGIN
set @variable = (select Dateipfad from AA_Test where rownumber = @cnt); -- Dateipfad Zeilenweises auslesen
print @variable -- drucken-> hier wird später der MakeDir c:\Dokumente\Dateipfad eingesetzt
SET @cnt = @cnt + 1;
END;
PRINT 'Erledigt';
GO
DROP TABLE AA_Test
 
Für alle die es interessiert hier der Code von dem was ja angeblich nicht geht :)

use Datenbank
DECLARE @RowNumber INT;
IF OBJECT_ID('AA_Test') IS NOT NULL DROP TABLE AA_Test -- löschen Tabelle 'AA_Test' wenn diese existiert
SELECT ROW_NUMBER() OVER (ORDER BY dbo.Documents.CONTACT) as RowNumber, -- Zeilennummer in Tabelle schreiben (vergeben)
Verzeichnis, Altdatei, Neudatei -- Felder die in die Datei geschrieben werden sollen
INTO AA_Test FROM Documents -- kopieren in AA_Test von Documents
where DESCRIPTION like '%%' and Name like '%%'
DECLARE @variable nvarchar(255);DECLARE @cnt INT = 1; DECLARE @max INT; -- Variablen für "Variable", "Min", "Max" Zeileneinträge für den Loop
DECLARE @DBName sysname; DECLARE @DataPath nvarchar(500); DECLARE @DirTree TABLE (subdirectory nvarchar(255), depth INT) -- Variablen für Ordneranlage
set @max = (select sum([rows]+1) from sys.partitions where object_id=object_id('AA_Test') and index_id in (0,1)); -- Max Einträge in Variable @max schreiben
WHILE @cnt < @max
BEGIN -- Start des Loop
set @variable = (select Verzeichnis from AA_Test where rownumber = @cnt); -- Auslesen des Wertes "Verzeichnis" Aus Zeile 1
SET @DBName = @variable
SET @DataPath = 'X:\OneDrive\Dokumente\' + @DBName -- Ordnerpfad angeben in dem das Verzeichnis angelegt werden soll
IF NOT EXISTS (SELECT 1 FROM @DirTree WHERE subdirectory = @DBName)
EXEC master.dbo.xp_create_subdir @DataPath -- Neuanlage des Verzeichnisses
SET @cnt = @cnt + 1; -- Zeilennummer um 1 erhöhen und nach Zeile 12 springen
END;
PRINT 'Erledigt';
GO
DROP TABLE AA_Test -- löschen der Tabelle AA_Test die Zur Erzeugung der Zeilennummern erzeugt wurden
 
Werbung:
Es hat keiner gesagt, dass es nicht geht.
Aber es geht einfacher (select statt einer Schleife) und sicherer (ohne xp_cmdshell).
 
Zurück
Oben