편집 : "SQL Server"라고하면 관리 Studio에 대해 실제로 말합니다. 혼란스러워서 미안해.SSMS는 테이블에 중복 레코드를 허용하지만 후속 업데이트는 허용하지 않습니다.
오 이런 일이 발생하면 싫어. 저는 어제 SQL Server를 사용하여 PIVOT 명령을 사용하여 작동 방식을 파악하려고했습니다. 그래서 네 개의 열이있는 새로운 테이블을 만들었고 첫 번째 열은 처음 몇 개의 행에 대해 동일한 값을 갖게되었습니다.
첫 번째 행, 첫 번째 열에 "value1"을 추가하고 Enter 키를 누르십시오. 사인이 없습니다. 키 또는 제약 조건이 추가되지 않았습니다. 첫 번째 행의 다른 열에 대해 NULL을 사용하여 다음 행까지 입력 할 수있었습니다 행 (괜찮습니다). 놀랍게도, 두 번째 행에 "value1"을 입력하고 입력 할 수있게되었습니다. 두 개의 동일한 행이 있기 때문에 불가능합니다. 그러나, 내가 주변에서 어지럽 혔던 이래로, 이것은 나를 괴롭히지 않았다. 이것이 내가가 만든 단지 테이블이기 때문에
표 1
Col1 Col2 Col3 Col4
---------------------------------
Value1 NULL NULL NULL
Value1 NULL NULL NULL
Value1 NULL NULL NULL
Value1 NULL NULL NULL
물론이 이상하고 관계형 이론을 나누기,하지만 난 정말 관심이 없었어요 : 그래서 같은 네 개의 행을 만들 진행 주위를 어지럽히십시오. 그러나, 나는 단지 다음에 일어난 일에서 내 머리카락을 꺼냈다. 이 데이터가 들어 오면 무엇이든 테이블에 없습니다. 행에서 col2, col3 또는 col4를 채우려 고 시도하면 SQL Server에서 중복 행이 있다는 메시지가 나타납니다. "행이 업데이트되지 않았습니다. 행 1의 데이터가 커밋되지 않았습니다. 행 값 (s)를 업데이트하거나 삭제하면 행이 고유하지 않거나 여러 행 (4 행)이 변경됩니다.
다른 말로하면 SQL Server에서 중복 행을 입력 할 수는 있지만 행을 고유하게 만들기 위해 업데이트 할 때 중복 행이 원인이라고 언급하면서 나를 허용하지 않습니다. 최악의 부분은 어떤 행을 삭제할 수도 없기 때문입니다 (동일한 오류 메시지가 나타남). 이 시나리오에서 한 번 발견 한 유일한 해결책은 테이블을 삭제하고 다시 시작하는 것입니다. 이는 어리석은 일입니다.
내 질문은 어떻게 이런 종류의 동작이 10 년 이상 발전된 잘 알려진 프로그램에 존재할 수 있는가입니다. 내가 머리가 빠지고 SQL Server의 동작을 받아 들여야합니까? 나에게 이것은 받아 들일 수없는 것이고 SQL Server는 처음에는 중복 행을 입력 할 수 없도록하거나, 모두 고유 할 때까지 중복 행을 업데이트하고 저장하려고 시도해야합니다.
이것은 어떤 종류의 SQL Server 싫어하는 게시판을위한 것이 아닙니다. 비교적 드물게 나는 이런 행동을하지만, 할 때, 정말 나를 뒤에서 나를 미칠 수 있습니다. 나는 왜 프로그램이 이런 식으로 구축 된 행동을하는지 이해하지 못한다. 세계에서 왜 내가 그것을 고칠 계획이 없다면 처음부터 중복 행을 입력 할 수 있었던 것처럼?
나는 MS Access에서 다시 일하는 것을 기억하고 있으며, 나는 이상한 고풍 행동과 같은 종류의 일을합니다. 몇 번씩 나는 거대한 양의 데이터를 복사하고, 테이블을 다시 만들고, 복사해서 다시 복사해야했습니다. 왜냐하면 Access에서 가지면 안되는 작업을 수행 할 수 있었기 때문입니다. 이제는 수정하지 말아야합니다. - 효과적으로 교착 상태가 발생합니다.
그래서 여기서 어떻게됩니까? SQL Server에 접근 할 때 일종의 패러다임 변화가 필요합니까? 나 또는 SQL Server가 그 문제입니까? (당신이 나 일 수 있다고 말하면 받아 들일 수 있습니다.)
실제로 삽입을 허용하지만 업데이트/삭제를 허용하지 않는 이유를 설명해 주셔서 감사합니다. 이것은 매우 도움이되었습니다. – JoeCool
아, 이제 오류 메시지가 훨씬 잘 이해됩니다. 처음에는 SSMS가 일종의 "깨어나 기"였고 행을 지우면 세 개의 중복 된 행이 여전히 존재한다는 것을 알았 기 때문에 오류가 중복 행의 잠재 실현이라고 생각했습니다. 중복을 허용하십시오. 하지만 삭제할 행이 무엇인지 모르기 때문에 행을 삭제할 수 없습니다. – JoeCool