2013-12-07 5 views
0

여기에 대한 질문을 처음하는 것은 내 질문에 대한 답변을 여러 번 얻은 것입니다. 그렇게 찾아 주셔서 감사합니다.하지만 이번에는 붙어 있습니다.SQL Server - 기본 테이블 업데이트 내역보기

나는 대부분 SQL에 익숙하지 않아 나와 함께 감당해야하며 SQL Server 2008 R2 데이터베이스가 나와 설계되지 않았기 때문에 다른 용도로 데이터를 가져 오려고 노력 중이며 SQL Server도 사용하고 있습니다. 관리 스튜디오 (SSMS).

설치 : 많은 테이블이 있지만이 경우 하나의 주요 특정 Items 테이블과 5 개의 다른 "조인"테이블 및 해당 테이블에서 생성 된보기로 작업하고 있습니다. 그럼 내가 더 익숙한 MS Access에서보기를 사용하여 주 테이블에 새로운 열을 추가했습니다. 그 중 하나는 MachineRateItem을 기본 테이블의 값 (동일한 레코드)와 다른 테이블. 나는이 모든 것을보기에 할 수 있었다.

하지만 내 질문은 :이 계산 된 값을 주 테이블의 기본값으로 사용하거나 트리거를 사용하여 실행할 수 있습니까?

나는 함수와 트리거를 시도하고 이것이 작동하지 않을지 궁금해하기 시작했다. 그리고 언급 한 바와 같이 값을 삽입 할 테이블을 기반으로 뷰를 작성했다.

전 (이것은 단지 부분이다)에 대한

: 기본 테이블은 다음과 같은 열이 있습니다 ...

RecID, PartRef, Material, Width, Length, Thickness, MachRate etc 

그리고 MachineRate

RecID, Rate 

그리고 TableOfTech 테이블

RecID, Material, Thickness1, Thickness2, AddToMachRate etc... 

사람들을 내 계산 된 값에 5 개의 테이블 중 3 개가 필요합니다. 기본 테이블의정말 도움이되지만 유를 제공합니다 :값 (TableOfTech에서 MachineRate + AddToMachRate에서 비율) TableOfTech.Material = MainTable.Material 및 TableOfTech.Thickness1와 Thickness2

사이 MainTable.Thickness이

얼마 전 확실하지 어디에 할 필요가 내가 함께 일하고있는 아이디어, 그래서 그것은 정말로 삽입되는 새로운 레코드에있는 테이블 열에 삽입하기 위해 실제로 작동합니까? SAME 테이블의 뷰 기반 값?

왜 이렇게하고 싶은지 설명해 드리겠습니다 ....이 경우에는 사용자가 그 값을 변경할 수 있어야하지만 대부분의 경우 기본값은 괜찮을 것이고 우리는 그것을 이 순간에

나는 이것이 너희들에게 의미가되기를 바란다. 나는 어떤 도움을 기대한다!

S. Brubacher 당신이 값은 같은 테이블에서이 계산 된 컬럼에 대해 계산되는 위치에서 모든 열을 유지하는 것이 가장 좋습니다 테이블에서 계산 된 열이 시나리오에서

+0

뷰에 'INSERT'트리거를 만들 수 있습니다. 따라서 뷰에 'INSERT'가 발생하면 "notified"를 받게되고 삽입 된 값으로 무엇을 할 것인지 결정할 수 있습니다 보기 - 기본 테이블에 저장하는 방법 –

+0

marc, 답장을 보내 주셔서 감사합니다 - 대신 삽입 트리거 대신 바보가 있지만 테이블의 필드에서 기본값을 얻을, 나는 컬럼에 설정된 기본 값을 가지고 이 널을 허용하지 않기 때문에, 단지 테스트하는 동안, 아래 ALTER TRIGGER [DBO]. trg_PopMachRateSQL] BEGIN AS dbo.Qry_AllParts2 INSTEAD OF ON INSERT UPDATE dbo.PPRR_PPRR_00000100 SET dbo.PPRR_PPRR_00000100.MachRateSQL = UseRat 참조 e 발신자 : WHERE dbo.PPRR_PPRR_00000100.RecID = i.RecID END –

+0

Muhammed Ali 내가 올바른 장소에 게시/회신하고 있는지 확실하지 않은 경우 ...? 나는 당신이 말하는 것을 깨달았지만, 내가 원하는 것은 내부 Access로부터 업데이트 쿼리를 실행하지 않으면 값이 변하지 않는다는 것입니다. 다른 말로하면 데이터가있는 테이블 2 개 중 하나에서 데이터를 변경하면 계산 된 열에 대해 메시지 상자를 팝업으로 표시하고 주 항목 레코드를 내 컴퓨터 속도 변경에 따라 업데이트해야하는지 묻습니다. 아마도 아직 모든 것을 생각하지 않고 있습니까? –

답변

0

.

다른 테이블의 열에서 계산 된 WHP 값을 계산할 수 있지만 값이 계산되는 모든 테이블에서 INSTEAD OF INSERT triggers, AFTER UPDATE, AFTER DELETE 트리거를 만들어야 소스 테이블의 모든 변경 사항에 대해 계산 된 열을 동기화 할 수 있습니다. 지옥 일 수 있고 방아쇠는 때때로 침묵하는 살인자 일 수있다.

그래서이 모든 번거 로움을 피하기 위해 값이 계산되는 곳의 열과 계산 된 열을 하나의 테이블에서 유지하십시오.

또 다른 더 간단한 옵션은이 복수의 기본 테이블에서 런타임에 데이터를 수집하고 런타임에 데이터를 계산하는 또 다른 view을 생성하는 것입니다. 이 열이 계산되는 곳의 데이터베이스에 이미 데이터가 있으므로 계산 된 결과를보고 싶을 때만 런타임에 계산할 수 있습니다.

기본 테이블에 많은 데이터가 있고 런타임에 값을 계산할 때 많은 시간이 걸리는 경우 INDEXED VIEWS을 고려하십시오.

제 생각에는 계산 된 열과 원본 열이 여러 테이블에있는 상황을 피하는 것이 좋습니다.

관련 문제