2010-07-16 3 views
1

MS SQL Server 2005를 사용하고 있습니다. 적절한 where 조건을 사용하여 테이블에서 행 세트를 선택하면 값이 31로 반환됩니다. 다른 것으로 업데이트하면 동일한 선택 값이 반환됩니다. 나는 업데이트를 실행하고 업데이트 된 테이블에서 선택하면 혼자 내부를 선택, 그것은 31로 2 열에서 값을 반환 실행하면SQL 2005 업데이트 - 개수 문제

update tablename 
set column1 = (Select column2 from tablename 
       where month(field1) = 05 and year(field1) = 2010) 
where field 2 = 'xxx' 

를 다음과 같이가 30로 업데이트하는 테이블 나는 그것을를 SQL 업데이트를 사용 3030으로 표시됩니다.

많은 행에 대해 1 개의 숫자 차이 ...

누구든지이 문제에 직면 할 수 있습니까 ...

+0

이상하게 보입니다. 테이블 정의의 관련 부분과 관련 데이터를 게시 할 수 있습니까? –

답변

0

테이블 정의가 없으면이 작업은 매우 어려울 수 있지만 값을 변경하는 테이블에 트리거가 있는지 먼저 확인해야합니다. 두 번째 것은 최대 코드를 깨는 의미하는 디버깅을 시작할 수 있습니다 :

declare @column2 as int 

Select @column2 = column2 from tablename where month(field1) = 05 and year(field1) =2010 

--Check whether @column2 is equal to 31. 
select @column2 

update tablename 
set column1 = @column2 
where field 2 = 'xxx' 

--Check whether column1 in tablename is equal to 31 
select column1 
from tablename 
where field 2 = 'xxx' 

나는 문제가, 당신은 '컬럼 1', '2 열'을 사용하면 열 이름의 일부를 혼합 있다는 것을 추측하고, '필드 1 '및'필드 2 '모두를 하나의 테이블에서 가져옵니다.

1

나는이 멋진 사이트에 가입 한 이후 답변을하지 않은 게시물을 검토하고 있습니다 ... 이전 게시물에 대한 올바른 접근 방법인지는 확실하지 않지만 누군가 내가 멈추라 고 말하면서 계속 추울 것입니다.

그래서 여기에 나는이 문제를 볼 수있는 작업은 다음과 같습니다

당신은 당신이 당신이 바로 당신이 SELECT 넘어 그것으로 무엇을하려고로 이동할 수, 총 레코드 집합을 선택할 수 있습니다 알고있는 경우.

결과를 INSERT하려고하지는 않지만 UPDATE입니다. 기존 행을 갱신 중이므로 유일한 절이 WHERE 필드 2 = 'xxx'이므로, WHERE에 일치하지 않는 하나의 행을 가질 수 있습니다. 해당 행에 대한 간단한 데이터 무결성 문제가있는 것 같습니다.

잘못된 행을 찾으려면 데이터 형식에 따라 NOT IN 또는 <>으로 테이블에 대한 쿼리를 수행하십시오.