mercoledì 6 dicembre 2023

SQL SERVER - Selezione del valore massimo tra più colonne della stessa riga

In SQL Server non esiste una funzione per calcolare il valore massimo tra più colonne della stessa riga, è presente solo la versione "per più righe" generata tramite raggruppamento (GROUP BY).

Per poter fare il calcolo del valore "massimo" tra più colonne, bisogna usare una sub-query:

SELECT  tbl.ID ,
        ( SELECT    MAX(v)
          FROM      ( VALUES ( tbl.Data1 ) , ( tbl.Data2 ) , ( tbl.Data3 ) ) AS value ( v )
          ) AS [MaxDate]
FROM    dbo.tabella AS tbl
Nota: i nomi delle colonne vanno inseriti tra parentesi, sennò non vengono riconosciuti.

SQL SERVER - Utilizzare un cursore per processare ogni riga di una tabella

 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