2013-06-17 3 views
11

현재 DB에 열이 있는데, 현재 NOT NULL으로 정의되어 있습니다. NULLs 허용하도록이 열을 업데이트하고 싶습니다.열이 NOT NULL인지 확인합니다.

다음과 같은 스크립트를 사용하고 있습니다. 그러나 이전에 변경되었을 수 있으므로 먼저 열이 이미 NULL (또는 NOT NULL)인지 확인하고 싶습니다.

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

도움을 주시면 감사하겠습니다.

+7

를 방문하십시오 당신은 자세한 내용은

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

같은 것을 쓸 수 있습니다? 열이 이미 nullable 인 경우 alter 문을 안전하게 실행할 수 있습니다. 아무런 효과가 없지만 오류가 발생하지는 않습니다. – hvd

답변

9

사용 COLUMNPROPERTY 열 속성을 얻을 수 있습니다. 당신이 확인하고 싶은 이유는 무엇입니까이 link

+1

+1 Neat. 이것은'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' 

null 허용 여부를 나타내는 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' 
관련 문제