SQL Server 2005 데이터베이스를 사용하고 있는데 begin ... end 블록에서 수행 할 작업에 따라 동일한 데이터 집합에 대해 서로 다른 두 가지 방식으로 동작하는 If 문이 있습니다. 나는 단지, 콘솔, 다음 코드를 인쇄 아무것도 인쇄 할 경우Insert 문은 항상 앞의 IF 문 결과에 관계없이 항상 실행됩니까?
은 먼저, 예상대로이 코드 인쇄 '컨트롤 발견'
if (not exists(select null from tblControls where Name = 'SOME_CONTROL_NAME'))
begin
print 'control not found'
end
반면 예상대로 :
if (exists(select null from tblControls where Name = 'SOME_CONTROL_NAME'))
begin
print 'control found'
end
그러나 코드를 다음과 같이 변경하면 :
if (not exists(select null from tblControls where Name = 'SOME_CONTROL_NAME'))
begin
insert into tblControls values (632, 'NEW_CONTROL_NAME', 'New Control', 1, 1, NULL, 1, 'DataControls.CheckBox', NULL, NULL, 1)
end
삽입 문은 항상 실행됩니다. tblControls에 일치하는 레코드가 있지만 이 동작을 일으킬 수있는 T-SQL 2005의 insert 문에 특별한 것이 있습니까? 아니면 확실하지 않은 부분이 있습니까? 나는 코드의 논리가 잘못되었는지 이해 하겠지만 print 문을 사용하여 테스트했을 때 예상대로 작동합니다.
EDIT : "Insert Error"메시지가 생성됩니다.
이 실망한 문제에 대한 도움을 주시면 감사하겠습니다.
너무! 불행히도, 나는 *로 변경하려고했지만 아무 것도 해결하지 못했습니다. 또한 인쇄 명령문이 예상대로 작동한다는 사실은 저에게 다른 것을 알려줍니다. begin ... end는 if 문에 대한 코딩 표준의 일부이므로 제거 할 수 없습니다. –
@WilliamSmith - SELECT * FROM tblControls WHERE Name = 'SOME_CONTROL_NAME'' 문을 실행하면 어떤 결과가 나타 납니까? –
@WilliamSmith, 두 번째 솔루션 (시작/끝)을 사용해보십시오. 나는 항상 그것을 사용하고 결코 실패한 적이 없다. 또한 INSERT 문의 VALUE 수는 tblControls의 (비 Identity) 열 수와 같습니까? –