2 Pluspunkte 0 Minuspunkte

Wie kann ich in MS SQL das Ergebnis einer Datenbankabfrage in einer Variable zwischenspeichern und eine weitere Abfrage damit ausführen?

SELECT * 
FROM dbo.aud_folder 
WHERE fld_shr_id = (
    SELECT shr_id 
    FROM dbo.aud_share 
    WHERE shr_name = 'GBI' 
    AND shr_imp_id = 241
)
von  

2 Antworten

0 Pluspunkte 0 Minuspunkte

Mit einem DECLARE erstellst du Variablen. Hier ist ein Beispiel.

-- Deklaration der Variablen
DECLARE @shr_id INT;

-- Speichern des Ergebnisses in der Variablen
SELECT @shr_id = shr_id 
FROM dbo.aud_share 
WHERE shr_name = 'GBI' AND shr_imp_id = 241;

-- Verwendung der Variablen in einer weiteren Abfrage
SELECT * 
FROM dbo.aud_folder 
WHERE fld_shr_id = @shr_id;
von (732 Punkte)  
0 Pluspunkte 0 Minuspunkte

Du kannst dazu eine temporäre Tabelle als Variable erstellen und die Daten darin zwischenspeichern.

-- Deklaration der Tabellenvariablen
DECLARE @TableVar TABLE (fld_id INT);

-- Einfügen der Ergebnisse in die Tabellenvariablen
INSERT INTO @TableVar (fld_id)
SELECT fld_id 
FROM dbo.aud_folder 
WHERE fld_shr_id = (SELECT shr_id FROM dbo.aud_share WHERE shr_name = 'GBI' AND shr_imp_id = 241);

-- Verwendung der Tabellenvariablen in einer weiteren Abfrage
SELECT * 
FROM dbo.aud_folder_right 
WHERE fri_fld_id IN (SELECT fld_id FROM @TableVar);

Oder ohne Variable

-- Erstellung einer temporären Tabelle
CREATE TABLE #TempTable (fld_id INT);

-- Einfügen der Ergebnisse in die temporäre Tabelle
INSERT INTO #TempTable (fld_id)
SELECT fld_id 
FROM dbo.aud_folder 
WHERE fld_shr_id = (SELECT shr_id FROM dbo.aud_share WHERE shr_name = 'GBI' AND shr_imp_id = 241);

-- Verwendung der temporären Tabelle in einer weiteren Abfrage
SELECT * FROM dbo.aud_folder WHERE fld_id IN (SELECT * FROM #TempTable);

-- Löschen der temporären Tabelle (optional, da sie nach der Sitzung automatisch gelöscht wird)
DROP TABLE #TempTable;
von (776 Punkte)  
Schönes Beispiel aber die Frage war nach Variablen ;)
Stimmt aber vielleicht trotzdem nützlich. Aber bitte, ich habe die Antwort bearbeitet. Mit Tabellen als Variablen :D