2013-06-17 35 views
11

私のDBには現在NOT NULLと定義されているカラムがあります。 NULLsを許可するようにこの列を更新したいと思います。カラムがNOT NULLであるかどうかを調べる

これを行うには次のスクリプトがありますが、以前に変更されている可能性があるので、最初に列がNULL(またはNOT NULL)かどうかを確認したいと思います。

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

助けてください。

+7

をご覧ください!カラムがすでにヌル可能な場合、あなたは安全にalter文を実行できますが、何のエラーも与えません。 – hvd

答えて

9

使用COLUMNPROPERTY列プロパティを取得します。あなたがチェックしたいんなぜあなたはより多くの情報については

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

ような何かを書くことができ、このlink

+1

+1ニート。これは 'sys'テーブルより効率的ですか?その効率性は、このシナリオでは大きなオーバーヘッドになります。 –

+0

私は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' 

nullableかどうかを表すBITが表示されます。それをする必要は本当にありません

3

は、だから、...もちろん、テーブルやカラムがまったく存在していることを前提とし、このような

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 

に切り替えることができれば理由既にNullableです.NullableからNullableに変更すると、負の効果はありません。このクエリでそれを行うことができますしかし

SELECT is_nullable 
FROM sys.columns 
WHERE object_id=object_id('YourTable') AND name = 'yourColumn' 
関連する問題