2013-06-17 22 views
11

DB'mde şu anda NOT NULL olarak tanımlanmış bir sütun var. NULLs izin vermek için bu sütunu güncelleştirmek istiyorum.Bir sütunun NULL OLMADIĞINI Bulma

Bunu yapmak için aşağıdaki betiğe sahibim, ancak daha önce değiştirilmiş olabileceğinden, ilk sütunun zaten NULL (veya NOT NULL) olup olmadığını kontrol etmek istiyorum.

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

Herhangi bir yardım için teşekkür ederiz.

+7

ziyaret ediniz Sen fazla bilgi için

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

gibi bir şey yazabilirsiniz? Sütun zaten geçersizse, alter ifadenizi güvenle çalıştırabilirsiniz, hiçbir etkisi olmayacaktır, ancak herhangi bir hata vermeyecektir. – hvd

cevap

9

Kullanım COLUMNPROPERTY sütun özelliği alma. Kontrol etmek istediğiniz Neden bu link

+1

+1 Temiz. Bu sys' tablolarından daha mı verimli? Bu senaryoda bu verimlilik büyük bir ek yük olmayacaktır. –

+0

Sanırım% 100 emin değilim .. :) – 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' 

o null olup olmadığını gösteren size BIT verecek. Bunu yapmak için bir ihtiyaç Gerçekten yok

3

Yani, ... elbette tablo ve sütun hiç var olduğunu varsayar Bu böyle

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 

geçiş olabilir çünkü eğer NULL değil, Nullable'dan Nullable'a bir sütun değiştirmenin olumsuz bir etkisi olmayacak. Eğer bu sorgu ile yapabilirsiniz Ancak

:

SELECT is_nullable 
FROM sys.columns 
WHERE object_id=object_id('YourTable') AND name = 'yourColumn' 
İlgili konular