>Per comodità vorrei aggiungere una colonna calcolata virtuale
>in base al campo chiusura: se il campo è NULL la colonna calcolata
>deve restituire False, per contro deve restiotuire True.
>Ho 2 problemi:
>1. Ho provato ad inserire la colonna con il calcolo sottostante
>ma il valore è sempre 'True' sia che il campo Chiusura sia NULL
>che contenga una data
>2. Con il calcolo sottostante mi viene restituito un valore stringa
>e non un valore bit (almeno credo)...
Ciao Maurizio,
Osserva il seguente esempio:
USE tempdb;
CREATE TABLE dbo.test(
Codice varchar(50) NOT NULL,
Descrizione varchar(60) NOT NULL,
Chiusura datetime NULL,
CONSTRAINT PK_test PRIMARY KEY(Codice)
);
ALTER TABLE dbo.test
ADD Chiusa AS CAST((CASE WHEN [CHIUSURA] IS NULL THEN 0 ELSE 1 END) AS bit) PERSISTED;
INSERT dbo.test VALUES
('Codice 1', 'Descrizione 1', NULL)
, ('Codice 2', 'Descrizione 2', CURRENT_TIMESTAMP);
SELECT *
FROM dbo.test;
/* Output:
Codice Descrizione Chiusura Chiusa
--------- -------------- ----------------------- -----------
Codice 1 Descrizione 1 NULL 0
Codice 2 Descrizione 2 2008-12-07 14:08:47.250 1
(2 row(s) affected)
*/
DROP TABLE dbo.test;
Come certamente saprai il data type booleano bit rappresenta con 1 il valore vero e con 0 il valore falso.
Ho utilizzato la funzione CAST per convertire il risultato dell'espressione in un valore bit.
Inoltre ho specificato la clausola PERSISTED per rendere persistente nel db il valore restituito dalla colonna calcolata, calcolandolo in fase di INSERT/UPDATE rendendo più efficiente le query che specificano tale colonna nella clausola WHERE.
>Avete consigli? Grazie!!!
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org