2016-04-02 17 views
0

Ich versuche, eine dynamische Abfrage zu machen, einen Cursor zu verwenden, möchte ich Dateigruppen auf alle Tabellen in meiner Datenbank erstellen, ich habe dies:Cursor mit Dynamic SQL Query

DECLARE @name VARCHAR(50) 
DECLARE @query VARCHAR(50) 

DECLARE vend_cursor CURSOR 
    FOR SELECT name FROM sys.tables order by name asc 

OPEN vend_cursor 
FETCH NEXT FROM vend_cursor; 

WHILE @@FETCH_STATUS = 0 
BEGIN 

    PRINT 'FG_'[email protected] 
    FETCH NEXT FROM vend_cursor INTO @name; 
END 

CLOSE vend_cursor 
DEALLOCATE vend_cursor 

Der Druck ist, weil dann ich sehen können, wie der Dateigruppe Name sein wird, aber ich möchte hinzufügen, diese: ALTER DATABASE AdventureWorks2012 ADD FILEGROUP FG_filegroupname

ich weiß, ich habe ‚exec sys.sp_executesql‘ zu verwenden, aber wie kann ich hinzufügen, dies zu meiner Anfrage? Vielen Dank im Voraus

Antwort

2

Ja, Sie können dies mit sp_executeSQL tun, aber das Wichtigste ist, dass Sie einen globalen Cursor einrichten müssen, da sp_executeSQL nicht im selben Umfang wie die Prozedur ist, die Sie ausführen. Siehe Beispiel

DECLARE @SQL nvarchar(1024), 
     @name varchar(255); 

SET @SQL = 'DECLARE vend_cursor CURSOR GLOBAL 
       FOR 
       SELECT name FROM sys.tables order by name asc'; 

EXECUTE sp_executesql @SQL; 
OPEN vend_cursor 
FETCH NEXT FROM vend_cursor INTO @name; 

WHILE @@FETCH_STATUS = 0 
BEGIN 

    PRINT 'FG_'[email protected] 
    FETCH NEXT FROM vend_cursor INTO @name; 
END 

CLOSE vend_cursor 
DEALLOCATE vend_cursor