2014-07-15 2 views
0

일부 데이터를 데이터베이스에 삽입하는 데 사용하는 SQL Server 스크립트가 있습니다. 나는 공간/시간 절약을 위해서 여기에 전체 스크립트를 업로드하지 않을 것이지만 중요한 비트를 포함 할 것입니다.NON-NULLABLE 열이 포함 된 문 삽입

그래서 여기에 문제가 있습니다. 일부 loginhtml에 대한 열이있는 테이블이 있습니다.이 열은 null이 허용되지 않는 유형입니다. 이 특정 추가에이 열을 공백으로 남겨두고 싶습니다. 그래서 내가 가리키고있는 부모에게 기본값으로 되돌릴 수 있습니다. 그래서 여기에 우리는이 중요한 부분에 대한 선언이 :

set @loginHtml = null 

그리고 여기에 필연적으로 실패 할 것입니다 삽입 부분은 다음과 같습니다 :

여기

declare @loginTitle varchar(250), @loginHtml varchar(max) 

과 우리가 설정됩니다 무슨이

insert dbo.ApplicationLogin(ApplicationID, Title, Html) 
    select @appID, @loginTitle, @loginHtml 

EDIT :이 스크립트는 부모 응용 프로그램과 상관없이 loginhtml 열을 "기본값"으로 설정할 수 있습니까? 이를 수행하는 데 사용할 수있는 "IF"문/절이 있습니까?

+1

null이 아닌 경우 무언가를 삽입하거나 기본값을 지정해야합니다. 널 대신 공백을 사용할 수 있습니까? – JiggsJedi

+0

아니요, 공백으로 지정하면 상위 응용 프로그램의 값으로 기본 설정되지 않습니다. – Skrubb

+0

'(no value)'또는 무엇인가 기본값을 정의 할 수 있습니까? 그 중 하나, 또는'NOT NULL' 제약을 제거하십시오 - 당신은 둘 다 가질 수 없습니다 ('NOT NULL'과 아무 것도 삽입하지 않습니다 ....) –

답변

0

을, 나는 싶습니다 그 점에 대해 사과하십시오.

if(@loginHtml is not null) 
begin 
    insert dbo.ApplicationLogin(ApplicationID, Title, Html) 
    select @appID, @loginTitle, @loginHtml 
end 

이을 :하지만 데이터베이스가 설정되는 방식은 응용 프로그램이이 일을 수행 할 수 있도록 부모 응용 프로그램에 loginhtml을 설정하고 "기술적으로"새 응용 프로그램에 추가 건너 뛰는, 부모 애플리케이션을 가질 수있다 성공적으로 실행되고 "@loginhtml"은 부모 응용 프로그램이 해당 값으로 설정 한 값으로 기본 설정됩니다.

0

null이 아닌 열의 경우 null 값을 삽입 할 수 없습니다. 빈 문자열이나 다른 기본값으로 설정해보십시오. 부모의 html을 선택하여 삽입 할 수도 있습니다. 열 삽입을 건너 뛸 수있는 방법이 없습니다. 컬럼에 NOT NULL 제약 조건이있는 경우

등의
0

이 언급 한, 당신은 운이 있습니다,하지만 당신은

if @loginhtml is null 
    begin 
     set @loginhtml = '' 
    end 

을하거나

set @loginhtml = '' 

이 무엇이든을 조회하기 위해 변경 될 수 있습니다 상위 응용 프로그램의 기본값은입니다.

그리고 무엇이든 대신 공백을 씁니다. 당신은 분명히 loginhtml이 없으면 어떤 문제가 생기게 될 것입니다. 그러나 그것이 원하는 것이면 당신이 원하는 것입니다.

insert dbo.ApplicationLogin(ApplicationID, Title, Html) 
select @appID, @loginTitle, ISNULL(@loginHtml, '') 

또는 테이블을 조정하고 기본 제약 조건 추가 :

+0

login.html을 부모 응용 프로그램의 기본값으로 설정하려면이 논리를 사용하십시오. – Skrubb

+0

@Skrubb SQL은 응용 프로그램 수준까지 읽지 않으므로 기본값이 설정된 위치에 따라 다릅니다. 이것이 디폴트 테이블에 저장되어 있다면,'set @loginhtml = (foo에서 default를 선택하십시오. 여기서 defaultname = 'loginhtml')'또는 구조가 무엇이든간에 할 수 있습니다. 또한이 테이블에 기본값이 설정되어 있다면'NULL'을 건네 주면 기본값으로 설정됩니다 (의미가있는 경우). 내 생각 엔이 테이블에 기본값이 설정되어 있지 않다는 것입니다! – franglais

0

당신은 당신의 스크립트를 조정할 수 있습니다 내가 최초 게시물에 이것을 언급하지 않을 수 있습니다

ALTER TABLE ApplicationLogin ADD DEFAULT (('')) FOR [Html];