2013-06-17 17 views
11

Mam kolumnę w moim DB, który jest obecnie zdefiniowany jako NOT NULL. Chciałbym zaktualizować tę kolumnę, aby umożliwić NULLs.Sprawdzanie, czy kolumna NIE jest NULL

Mam następujący skrypt, aby to zrobić, ale chciałbym najpierw sprawdzić, czy kolumna jest już NULL (lub NOT NULL), ponieważ mogła zostać zmieniona wcześniej.

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

Każda pomoc doceniona.

+7

Dlaczego chcesz sprawdzić? Jeśli kolumna jest już zerowa, możesz bezpiecznie uruchomić swoje polecenie zmiany, nie będzie to miało żadnego efektu, ale nie spowoduje również żadnego błędu. – hvd

Odpowiedz

9

Zastosowanie COLUMNPROPERTY uzyskać właściwość kolumny. Możesz napisać coś podobnego

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

Aby uzyskać więcej informacji, prosimy odwiedzić ten link

+1

+1 Schludny. Czy jest to bardziej wydajne niż tabele 'sys'? Nie w tym scenariuszu wydajność będzie ogromna. –

+0

Myślę, że tak, chociaż nie jestem w 100% pewny .. :) – 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' 

daje BIT reprezentujący czy jest pustych lub nie.

Więc można przełączyć się na tym jak

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 

To oczywiście zakłada, że ​​tabela i kolumna w ogóle istnieje ...

3

Tak naprawdę nie ma potrzeby tego robić, bo jeśli jest już Nullable, zmiana kolumny z Nullable na Nullable nie będzie miała negatywnego wpływu.

Jednak można to zrobić z tego zapytania:

SELECT is_nullable 
FROM sys.columns 
WHERE object_id=object_id('YourTable') AND name = 'yourColumn' 
Powiązane problemy