2016-12-16 1 views
1

Ich habe diese Anfrage:Verwenden select-Anweisung Ergebnisse in while-Schleife

SELECT name FROM SomeDB.sys.objects WHERE type IN ('P') AND name LIKE('dbo%'); 

Was will ich jetzt zu tun ist, den Namen verwende ich aus der Tabelle in einer while-Schleife ausgewählt. wie diese (Pseudocode)

WHILE (select < select.END) 
BEGIN 
    DROP PROC select.name 
END 

Wie kann ich das erreichen?

+0

Möchten Sie alle Prozeduren löschen? oder so? – Buddi

+0

Ja Ich verwende einen Service Broker und wenn die App nicht normal heruntergefahren wird. Und es fängt wieder an Ich möchte mit einer sauberen DB ohne Maklergegenstände beginnen. Eigentlich geht es nur um die Wiederverwendung des Select in der Zwischenzeit kann ich nicht herausfinden. – WagoL

Antwort

1

Zum Löschen von Datenbankobjekten können Sie dynamisches Skript wie unten verwenden. Wenn Abhängigkeiten vorhanden sind, müssen Sie zunächst die übergeordneten Elemente löschen.

DECLARE @SQL NVARCHAR(MAX) 

SET @SQL=(
SELECT 'DROP PROCEDURE '+NAME+';' FROM SYS.OBJECTS WHERE TYPE IN ('P') 
FOR XML PATH('')) 
--select @sql 
EXEC SP_EXECUTESQL @SQL 
+0

Was bedeutet 'FOR XML PATH ('')'? – WagoL

+0

@WagoL Wir werden For Xml Pfad ('') nur für die Verkettung aller Zeilen in eine einzige verwenden. – Buddi

+0

Ich bekomme diesen Fehler 'Msg 102, Ebene 15, Zustand 1, Zeile 1 Falsche Syntax in der Nähe von '-'.' Dies ist die Abfrage, die ich ausgeführt habe. 'DECLARE @SQL NVARCHAR (MAX) SET @ SQL = ( SELECT 'DROP PROCEDURE' + Name + ';' Von SMARTnet.SYS.OBJECTS WHERE TYPE IN ('P') UND name LIKE ('dbo%') FOR XML PATH ('')) - Wählen Sie @sql EXEC SP_EXECUTESQL @ SQL' aus – WagoL

Verwandte Themen