Speichern eines Wertes einer Tabelle in einer Variablen "@Inhalt"

radiomagazin

Benutzer
Beiträge
19
Ich möchte gerne aus der

Tabelle "Dokumente" aus der
Zeile "123" einen Wert aus dem
Feld "Namen" auslesen und diesen dann

in einer Variablen @Inhalt speichern um diese Variable später weiter zu verwenden.
Kann mir hierbei jemand helfen ?

VLG Ingo
 
Werbung:
mir ist zwar mittlereile klar, daß jeder Hinweis und Ratschlag an Dich völlig unnütz ist, aber sicherlich wollen andere im Gegensatz zu Dir noch was lernen. Daher kannst Du, @radiomagazin, hier aufhören zu lesen.

Du willst mittels Schleifen in SQL irgend etwas machen. Das macht man nicht, das ist konzeptionell falsch. SQL kennt weder Variablen noch Kontrollstrukturen wie Schleifen, und die braucht man auch nicht.

Du hast:

Code:
test=*# select * from radiomagazin;
 id | dir_name
----+----------
  1 | bla
  2 | blub
  3 | foo
  4 | bar
  5 | batz
(5 rows)

und willst für jedes dir_name einen Befehl "mk /das/ist/mein/pfad/" + dem dir_name generieren.

Code:
test=*# copy (select 'mk /das/ist/mein/pfad/' || dir_name  from radiomagazin order by id) to stdout;
mk /das/ist/mein/pfad/bla
mk /das/ist/mein/pfad/blub
mk /das/ist/mein/pfad/foo
mk /das/ist/mein/pfad/bar
mk /das/ist/mein/pfad/batz

Nun das ganze in einer Datei speichern:

Code:
test=*# copy (select 'mk /das/ist/mein/pfad/' || dir_name  from radiomagazin order by id) to '/tmp/radiomagazin.sh';
COPY 5
test=*#

In der Datei /tmp/radiomagazin.sh hast Du nun alle Kommandos stehen, die Du ausführen möchtest.


Andreas
 
Ich möchte gerne aus der

Tabelle "Dokumente" aus der
Zeile "123" einen Wert aus dem
Feld "Namen" auslesen und diesen dann

in einer Variablen @Inhalt speichern um diese Variable später weiter zu verwenden.
Kann mir hierbei jemand helfen ?

VLG Ingo
Hallo Ingo,
das ist sogar ziemlich einfach.
Beispiel
declare @variable nvarchar(10);
set @variable = (select name from dokumente where <passende Bedingung>);

Natürlich darf das Select Statement nur eine Zeile zurückliefern.
 
Ja danke hat echt geholfen. 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
 
Ja danke hat echt geholfen. 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
 
Werbung:
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
 
Zurück
Oben