테이블을 업데이트하는 업데이트 문이 있습니다. 마지막으로 수정 한 시간을 기록하는 열이 있습니다. 특정 행의 데이터가 변경되지 않은 경우 마지막으로 수정 한 날짜 시간을 변경하고 싶지 않습니다.SQL에서 행이 업데이트되었는지 확인하는 가장 좋은 방법
업데이트 문이 데이터 행을 변경하는지 여부를 확인하는 가장 좋은 방법은 무엇입니까?
감사합니다, 코드에서 대 오래된 새로운 데이터 대신 쿼리에서 그 일의
테이블을 업데이트하는 업데이트 문이 있습니다. 마지막으로 수정 한 시간을 기록하는 열이 있습니다. 특정 행의 데이터가 변경되지 않은 경우 마지막으로 수정 한 날짜 시간을 변경하고 싶지 않습니다.SQL에서 행이 업데이트되었는지 확인하는 가장 좋은 방법
업데이트 문이 데이터 행을 변경하는지 여부를 확인하는 가장 좋은 방법은 무엇입니까?
감사합니다, 코드에서 대 오래된 새로운 데이터 대신 쿼리에서 그 일의
확인합니다.
데이터가 전혀 변경되지 않으면 DB 레이어를 불필요하게 신경 쓸 필요가 없습니다.
요약하면 데이터가 변경되지 않은 경우 UPDATE 문을 보내지 마십시오.
을 사용하고 있습니다. 데이터를 가져 오기 위해 이전 쿼리 (SELECT)를 수행해야하는 상황이 있고 실제 업데이트를 수행하기 위해 두 번째 쿼리를 수행해야하는 상황이 있습니다. 이 경우에는 변경 사항이 발생하지 않더라도 하나의 UPDATE 쿼리 만 수행합니다. –
나는 @jcinacio에 동의하지만 OP 질문은 여전히 우리가 @ jcinacio와 같이 간다면 계속 머물러있다. 따라서 OP가 2005/2008 SQL을 사용하는 경우 OUTPUT 절을 사용하여 새 값과 이전 값을 비교할 수 있습니다. 아래 내 대답을 참조하십시오. – IsmailS
이 작업을 선행 적으로 수행하려면이 작업을 수행 할 수있는 유일한 방법은 기존 값과 새 값 (모든 값)을 비교하기 위해 업데이트 문의 WHERE 절을 수정하는 것입니다. 의 ANY이 같지 않으면 업데이트가 수행되어야합니다.
한 가지 방법은 트랜잭션을 시작하고 행의 내용을 선택한 다음이를 업데이트 할 대상과 비교하는 것입니다. 일치하지 않으면 업데이트를 수행하고 트랜잭션을 종료합니다. 일치하는 경우 트랜잭션을 롤백하십시오.
DAL을 사용하면 편리합니다. 그것은 모든 열을 추적하므로 아무 것도 변경되지 않으면 데이터베이스에 UPDATE 문도 보내지 않습니다.
테이블을 거쳐 일부 행을 수정하는 것과 같은 소리가 난 다음 테이블을 두 번째 뒤로 돌아가서 방금 변경된 행의 타임 스탬프를 업데이트하려고합니다.
두 번에 걸쳐 실행하지 마십시오. 당신이 변화하고 다른 어떤 열을 업데이트 할 때 그냥 같은 시간에 날짜/시간을 업데이트 :
UPDATE myTable
SET retailprice = wholesaleprice * 1.10,
lastmodified = GetDate()
WHERE ...
을하거나 모든 행에 UPDATE 문을 발행하고 있지만 대부분의 행에 대해, 단지 값으로 설정합니다 이미 가지고 있니? 그러지 마.
UPDATE myTable
SET retailprice = wholesaleprice * 1.10,
lastmodified = GetDate()
WHERE retailprice <> wholesaleprice * 1.10
당신은 대신이 DAL 층에서 위의 제안 된 내용을 할 수있는 T-SQL에서 UPDATE 트리거 쓸 수 - 비교 : 당신의 WHERE 절에 수정할 수 없습니다 것이다 해당 행을 제외 기존 레코드의 값과 갱신 명령문의 값을 비교하여 갱신 사항을 적용할지 여부를 결정하십시오. 트리거에서 Columns_Updated() 함수를 사용하여 업데이트가 있는지 확인할 수 있습니다.
컴퓨터의 관점에서 볼 때 특별히 효율적은 아니지만 한 번 쓸 수 있으며 응용 프로그램, 저장 프로 시저 또는 다른 프로세스가 레코드를 업데이트하려고 할 때이 상황을 처리합니다.
기록 또는 이전 질문으로 인해 이것이 SQL Server 구성임을 어떻게 알 수 있습니까? –
당신 말이 맞아요. 나는 가정했다. 그러나 다른 SQL 데이터베이스 (예 : Oracle)도 유사한 기능을 구현합니다. mySQL, Postgres 등은 잘 모릅니다. –
데이터를 제어 할 수 있는지 여부에 달려 있습니다. 위의 Seb는 업데이트를 수행하기 전에 새 데이터와 비교하여 이전 데이터를 확인해야한다는 점에서 정확합니다. 그러나 데이터가 귀하의 통제하에 있지 않은 경우에는 어떻게해야합니까?
당신이 웹 서비스를 업데이트하라는 메시지가 있다고 가정 해보십시오. 그런 다음 기존 데이터를 쿼리하고이를 새 데이터와 비교하는 것이 유일한 방법입니다.
업데이트로 인해 실제로 데이터가 변경되었는지 여부를 감지하는 SQL 기능을 알 수 없습니다.
업데이트 문에 포함 된 행 수를 SQL에서 감지하는 방법이 있습니다. 업데이트 문이 실제로 어떤 데이터를 변경했는지 여부를 감지하는 방법을 알지 못합니다. 흥미로울 것입니다.
SQL 2005/2008을 사용하는 경우 저장 프로 시저에서 다음과 같이 할 수 있습니다.
update newTable
set readKey='1'
output inserted.id,
inserted.readKey as readKey,
deleted.readKey as prevReadKey
into @tempTable
where id = '1111'
그럼 당신은 prevReadKey 및 readKey 모두가 당신이 마지막으로 수정 된 날짜를 재설정 할 수 있습니다 유사한 값을 갖는 경우 유사한 값이 있는지 확인하기 위해 @tempTable에서 선택할 수 있습니다.
이렇게하면 값이 실제로 변경되는 경우 테이블에서 여러 쿼리를 실행할 필요가 없습니다. 그러나 값이 변경되지 않는 경우에는 필요하지 않은 경우 두 개의 업데이트 구문을 실행합니다. 이러한 경우가 드물다면 괜찮을 것입니다.
P. 참고 : - 주어진 쿼리는 테스트되지 않았으므로 구문 적으로 잘못되었을 수 있습니다. 하지만 이것이 문제를 해결할 수있는 방법입니다. 내 프로젝트 중 하나에서 병합 성명과 함께 OUTPUT 절을 사용하여 다음과 같은 방식으로 수행했으며 업데이트 명령문으로도 수행 할 수 있습니다. 여기에 있습니다. reference of OUTPUT Clause
사용중인 언어/프레임 워크에 대한 세부 정보를 제공해주십시오. 예를 들어, PHP에서 mysql_query는 업데이트 문에서 업데이트 된 행 수를 반환한다고 생각합니다. – kyle
이 경우 실제로 C#/T-sql /Asp.Net –