코드를 넘겨받은 프로그램이 있는데...
ADDR 필드값에 대한 데이터가 중복되어 입력되지않고 업데이트되어야 하는데 중복데이터가 입력됩니다.
스래드가 여러개 돌아가긴하지만 스래드당 테이블이 하나라서 문제가 없어야할거로 생각되는데 자꾸 데이터가 늘어납니다.
쿼리는 아래와같습니다.
IF NOT EXISTS (SELECT [TIMESTAMP] FROM [T] WHERE [ADDR] = 9889)
BEGIN
INSERT INTO [T] (ADDR], [VALUE], [TIMESTAMP]) VALUES (9889, 1.0, GETDATE());
END
ELSE
BEGIN
UPDATE [T] SET [VALUE] = 1.0, [TIMESTAMP] = GETDATE() WHERE [ADDR] = 9889;
END
필드 몇개 빼고 임의로 이름을 정리한 쿼리입니다.
문제는 ADDR 필드의 값에대한 데이터가 있으면 UPDATE, 없다면 INSERT를 하도록하는데 며칠 지나고보면 대부분의 서버에서는 항상 9889값을 가지는 데이터 레코드가 하나둘 늘어나서 함께 UPDATE되고있습니다.
분명 테이블 하나에대한 스래드는 하나뿐인데... 프로그램이 어딘가 문제있어서 같은 테이블에 저 쿼리가 한번에 여러 스래드에서 쿼리를 사용하게되는걸까요?
아니면 저 쿼리에서도 트랜잭션을 써야하는지 궁금합니다.
Qt의 SQL 플러그인이 ODBC를 통해서 MS SQL을 지원하던데 설마 ODBC문제일까요?
감사합니다. |