Per "ciclare" all'interno dei dati di una tabella (ad esempio, per eseguire uno script per ogni voce della tabella), si utilizzano i cursori.
Il modo corretto per non avere due "fetch" nel codice è usare un "ciclo infinito" WHILE.
Ecco un esempio per recuperare (e utilizzare) il nome di tutte le tabelle (non di sistema) presenti:
SELECT *
DECLARE @tblName NVARCHAR(255)
-- creazione del cursore
DECLARE tbl_cur CURSOR FOR
SELECT TABLE_NAME
FROM [DB_NAME].INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'dbo'
-- gestione del cursore
OPEN tbl_cur
WHILE 1 = 1
BEGIN
FETCH NEXT FROM tbl_cur
INTO @tblName
IF @@FETCH_STATUS <> 0
BREAK
-- esecuzione comandi
SELECT 1
END
-- chiusura del cursore
CLOSE tbl_cur
DEALLOCATE tbl_cur
Nessun commento:
Posta un commento