2011-11-21 3 views
0

일부 VAT 계산을 수행하는 MS SQL 2005의 계산 열이 있습니다. 웹 사이트에서는 한 번만 생성 할 수있는 인보이스를 사용하고 VAT를 계산하기 위해 계산 열의 값을 사용합니다.수식이 변경되면 계산 열의 값이 변경되지 않을 수 있습니까?

불행히도 계산 된 VAT 값이 몇 센트 떨어져 있다는 것을 알 수있는 버그가 발견되었습니다. 커다란 문제는 아니지만 이전에 계산 된 모든 값에서 값을 변경할 수 없습니다. 이러한 값은 인보이스에 반영되어야합니다.

tldr; 이미 계산 된 값을 다시 계산하지 않고 계산 된 열의 계산을 변경하려면 어떻게합니까?

+0

계산/수식을 열에 어떻게 적용합니까? – Nonym

답변

5

계산식 열 정의가 테이블의 모든 행에 적용되므로 짧을 수는 없습니다. 하지만 어째서 계산 된 열을 사용하는 이유는 무엇입니까? 부가가치세 (VAT) 요율이 변경되면 상품 및 서비스에 적용하기위한 규칙이 변경되고 시간이 지남에 따라 인보이스 수가 증가하면 계산 열이 솔루션으로 점점 더 어색 해집니다.

VAT를 한 번 계산하여 열에 저장 한 다음 값을 업데이트하지 않는 것이 훨씬 간단하고 안전합니다. 사용 권한, 트리거 및/또는 감사를 사용하여 입력 한 후에 값이 변경되지 않도록 할 수 있습니다.

그래서 계산되지 않은 새 열을 추가하고 계산 된 열의 값을 복사 한 다음 계산 된 열을 삭제합니다 (this question 참조). 물론 처음부터 실제로 값을 계산하기 위해 수행해야하는 응용 프로그램 개발도 필요합니다. 약간의 추가 작업이지만 버그를 발견했기 때문에 어쨌든 해결해야합니다.

+0

완전히 동의합니다. 내 대답이 말하는대로. – starskythehutch

0

행에 날짜 스탬프가 있으면 해당 값에 따라 수식이 달라질 수 있습니다. 계산 된 열을 삭제하고 다시 계산해야합니다. 이것은 최소한의 통합을 필요로하지만, 결국에는 계산을 사용하는 대신이 값을 스탬프 처리해야한다고 생각합니다.

CREATE TABLE dbo.mytable (low int, high int, insertdate datetime, myavg AS (low + high)/2) ; 

insert into dbo.mytable values (1,10,'10-10-10') 
insert into dbo.mytable values (1,10,'10-10-10') 
insert into dbo.mytable values (2,20,'11-11-11') 

alter table dbo.mytable add myavgplusone as (case when insertdate < '11-1-11' then (low + high)/2 else ((low + high)/2)+1 end) 


select * from dbo.mytable 
관련 문제