2010-11-30 5 views

답변

11

허용 안 널 (null)과 getdate()

/*Deal with any existing NULLs*/ 
UPDATE YourTable SET EntryDate=GETDATE() WHERE EntryDate IS NULL 

/*Disallow NULLs*/ 
ALTER TABLE YourTable ALTER COLUMN EntryDate DATE NOT NULL 

/*Add default constraint*/ 
ALTER TABLE YourTable ADD CONSTRAINT 
    DF_YourTable_EntryDate DEFAULT GETDATE() FOR EntryDate 
+2

이것은 최고의 솔루션입니다. 쿼리가 EntryDate 필드에 대해 명시 적으로 NULL을 제공하면 쿼리에 오류가 발생한다는 효과가 있습니다. 쿼리는 EntryDate에 대해 아무것도 지정하지 않거나 DEFAULT VALUES를 지정해야합니다. –

+0

, 아마도,하지만 그가 요구하는 것이 아닙니다. – smirkingman

+1

@smirkingman - 모호한 IMO입니다. "쿼리에서 값이 제공되지 않은 경우"를 해석하는 방법에 따라 다릅니다. 내 대답은 'INSERT INTO [YourTable] (Col1) VALUES ('X ')' –

1
Update table 
set EntryDate = getdate() 
where EntryDate is null 
+2

코드 또는 XML을 게시하는 경우 ** 텍스트 편집기에서 해당 줄을 강조 표시하고 편집기 툴바에서 "코드"버튼 (101 010)을 클릭하여 멋지게 형식을 지정하고 구문을 강조 표시하십시오! –

+0

또한 OP가 예상 한 것처럼 자동으로 정확하지는 않습니다. 물론 - 그것은 오늘 날짜로 NULL 값을 업데이 트 -하지만 그것은 명시 적으로 호출해야합니다, 그것은 데이터가 삽입되면 자동으로하지 않습니다 .... –

0

또 다른 솔루션의 컬럼에 디폴트 설정 : 테이블 이름을 바꾸고을 수행하는 같은 이름의 뷰를 작성

을 원하는 논리 (예 :

CREATE VIEW TableName 
AS 
SELECT Column1, Column2, ... ISNULL(EntryDate, GETDATE()) 
FROM Old_TableName 

그런 다음 실제 데이터를 변경하지 마십시오. b 당신이 그 테이블에 대해 null 값을 얻으면 오늘 날짜를보고합니다.

+0

이로 인해 EntryDate 값이 다른 응답과 매우 다르게 작동합니다. 문제는 모호하여 어느 부분이 옳은 것인지 확신 할 수 없습니다. 뷰를 사용하면 NULL EntryDate 컬럼이 현재 날짜 시간으로 변경되고 모든 미래에 대해 동일한 값을 유지하는 UPDATE 응답과 대조적으로 현재 날짜 시간 값 (각 실행마다 다름)을 항상 갖게됩니다 고르다. –

+1

ISNULL 대신 COALESCE를 사용해야한다는 것을 제외하고는 이것이 올바른 해결책이라고 생각합니다. –

+0

@idevlop - 이유가 무엇입니까? – JNK

관련 문제