2013-06-17 21 views
11

Ho una colonna nel mio DB che è attualmente definita come NOT NULL. Vorrei aggiornare questa colonna per consentire NULLs.Scoprire se una colonna NON È NULLA

Ho lo script seguente per eseguire questa operazione, tuttavia, vorrei verificare prima se la colonna è già NULL (o NOT NULL), poiché potrebbe essere stata modificata in precedenza.

ALTER TABLE [dbo].[aud] 
ALTER COLUMN [actname] nvarchar(50) NULL 

Qualsiasi aiuto apprezzato.

+7

Perché vuoi controllare? Se la colonna è già annullabile, puoi tranquillamente eseguire la tua alter dichiarazione, non avrà alcun effetto ma non darà alcun errore neanche. – hvd

risposta

9

Usa COLUMNPROPERTY per ottenere proprietà della colonna. Si può scrivere qualcosa di simile

SELECT COLUMNPROPERTY(OBJECT_ID('dbo.aud'),'actname','AllowsNull') AS 'AllowsNull'; 

Per maggiori informazioni visita il link

+1

+1 Neat. È più efficiente delle tabelle 'sys'? Non che l'efficienza sarà un enorme sovraccarico in questo scenario. –

+0

Penso di sì anche se non sono sicuro al 100% .. :) – Pawan

6
select is_nullable from sys.columns c inner join sys.tables t on 
t.object_id = c.object_id where t.name = 'aud' and c.name = 'actname' 

vi darà una BIT rappresentando se è annullabile o no.

Così si potrebbe accendere questo come

IF EXISTS(SELECT * from sys.columns c inner join sys.tables t on 
    t.object_id = c.object_id where t.name = 'aud' and c.name = 'actname' AND 
    is_nullable = 1) 
    BEGIN 
     --What to do if nullable 
    END 
ELSE 
    BEGIN 
     --What to do if not nullable 
    END 
END 

Questo naturalmente presuppone che la tabella e la colonna esistono affatto ...

3

Non c'è davvero bisogno di farlo, perché se è già Nullabile, la modifica di una colonna da Nullable a Nullable non avrà alcun effetto negativo.

Tuttavia è possibile farlo con questa query:

SELECT is_nullable 
FROM sys.columns 
WHERE object_id=object_id('YourTable') AND name = 'yourColumn' 
Problemi correlati