2009-05-19 8 views
1

업데이트 : SQL 서버에 문제가없는 것 같습니다. 뷰 내에서 수동으로 데이터베이스 내부의 업데이트 문을 실행하고 Bar 테이블을 업데이트 할 수있었습니다. 문제가 그들에게 있다고 생각하기 때문에 이것을 닫고 OleDbDataAdapters를 더 연구 할 것입니다.다중 테이블보기의 테이블을 업데이트 할 수 있는지 확인하는 방법은 무엇입니까?

이 질문은 MS SQL Server 2000에 적용됩니다. 수정할 수있는 멀티 테이블보기 테이블을 어떻게 결정합니까? 나는 (VB.NET의 OleDbDataAdapters를 사용하여)이 뷰를 업데이트 할 때, 나는 푸의 열, 그러나 바의 열을 업데이트 할 수 있습니다

CREATE VIEW dbo.MyView 
AS 
SELECT  dbo.Foo.Id, dbo.Bar.Id, dbo.Foo.column1, dbo.Foo.column2, 
      dbo.Foo.column3, dbo.Bar.column1, dbo.Bar.column2, 
      dbo.Bar.column3 
FROM  dbo.Bar INNER JOIN 
        dbo.Foo ON dbo.Bar.Id = dbo.Foo.ForeignId 

:

나는 다음 볼 수 있습니다. 이것에 대한 조사를 통해 MS SQL 서버는 테이블 중 하나만 업데이트 할 수 있다는 다중 테이블 뷰에서 알 수 있습니다. 그래서 내 질문은 SQL 서버가 어떤 테이블을 업데이트 할 수 있는지 결정하는 것입니다.

보기에서 특정 행의 필드를 편집하는 테스트를 시도했습니다. 그런 다음 OleDbDataAdapter를 사용하여 뷰를 업데이트했습니다. Foo 테이블에 대한 편집 만 허용되었습니다. Bar 테이블에 대한 편집이 무시되었습니다 (예외가 발생하지 않음).

어떤 테이블을 업데이트 할 수 있는지 또는 어느 테이블을 제어 할 것인지 예측할 수있는 방법이 있습니까? 바가 Foo 대신 업데이트 가능한 테이블이되도록하려면 어떻게해야합니까?

업데이트 : 나는 구글, MS SQL 서버에서 이걸 발견 2000 Unleased :

http://books.google.com/books?id=G2YqBS9CQ0AC&pg=RA1-PA713&lpg=RA1-PA713&dq=ms+sql+server+ "다중 테이블 +보기"++ 업데이트 & 소스 = BL & OTS = ZuQXIlEPbO & SIG = JbgdDe5yU73aSkxh-SLDdtMYZDs & HL = EN & EI = B-0SSq-aHZOitgPB38zgDQ & 사 = X & ㅅ = book_result & CT = & resnum = 1 # PRA1-PA713, M1 결과

(URL이 나는 작동하지 않습니다 붙여 넣기하기 위해 노력하고있어 몇 가지 이유 이 사이트, 소아 당신이 & 붙여 넣기를 복사해야 Y)

말한다.

  • 이상 하나 기본 기본 테이블에 영향을 미치지 수있는 멀티 테이블보기를 통해 업데이트.
  • 다중 테이블보기에 대해 삭제를 실행할 수 없습니다.

그러나 아직 내 질문에 대한 답변을 볼 수 없습니다.

다시 말하지만, 내 질문은 :

어떻게 결정합니까 수정할 수있는 다중 테이블보기의 어떤 테이블?

각 테이블마다 두 개의 업데이트 문을 쓸 수 있다는 것을 알고 있습니다. 내 관심사가 다르다. 위와 같은보기를 사용하는 코드를 감사해야하며보기에 대한 업데이트를 수행해야합니다.업데이트의 어느 부분이 자동으로 무시 될지 결정하는 방법을 찾고 싶었습니다.

예 :

내가 Bar.Column1을 편집 한 후 위해 OleDbDataAdapter의 업데이트() 메서드를 호출합니다. 이로 인해 Bar 테이블이 수정되거나 예외가 throw되지 않습니다. Foo.Column2를 편집 한 다음 Update()를 호출하면 Foo 테이블이 수정됩니다.

+0

Bar를 업데이트하려고 할 때 동시에 Foo를 업데이트하고 있습니까? – JeffO

+0

OleDbDataAdapter를 사용하기 때문에 데이터베이스에 입력되는 정확한 SQL 구문을 알 수 없습니다. 데이터 어댑터는 뷰에서 직접 데이터를 가져 오므로 개별 테이블이 아닌 뷰를 업데이트한다고 가정했습니다. 내가 어떻게 확인할 수 있는지 아십니까? –

+0

뷰를 업데이트하면 기본 테이블이 업데이트된다는 사실을 알고 있어야합니다. 뷰 자체가 어떤 데이터도 보유하지 않는다는 것을 알게됩니다. 그것이 내가 쓴 것에 혼란스러워하면 죄송합니다! –

답변

-1

기본 키를 반환하여 테이블의 행을 고유하게 식별 할 수 있어야합니다. 보기에 dbo.Bar.Id을 돌려 보내면 Bar 테이블의 열을 편집 할 수 있어야합니다.

+0

내 실제보기에서 나는 Bar.Id를 선택에 포함시킵니다. 일치하도록 질문을 업데이트하겠습니다. 다른 아이디어? –

1

보기에서 모든 테이블을 업데이트 할 수 있지만 해당 문에서 동일한 테이블에있는 필드 만 업데이트 할 수 있습니다. 보기에서 두 테이블의 필드를 갱신해야하는 경우 두 개의 갱신 명령문을 작성해야합니다.

개인적으로 개인적으로보기에서 업데이트하거나 삭제하지 않는 것이 좋습니다. 내가 기본 테이블을 사용합니다.

또한보기가 업데이트 가능한지 여부에 관한 규칙이 있습니다. 온라인 설명서를 참조하십시오. 검색 대상 : 보기 -SQL Server, 데이터 수정

+0

내가 이해한다면, 뷰를 업데이트하는 대신 각 기본 테이블을 업데이트하라는 의미입니다. 내가 알 수있는 한,보기의 목적을 상실합니다. 예를 들어, 클라이언트 코드는 기본 테이블의 구조를 알아야합니다. –

+0

그리고 요점은 더 중요합니다. 나는 뷰와 독립적으로 테이블을 업데이트 할 수 있다는 것을 알았다. 대신 MS SQL Server가 업데이트 할 수있는 두 테이블을 결정하는 방법을 알고 싶었습니다. 내가 바라는 동작은 Bar에 대한 변경 사항은 무시되지만 Foo에 대한 변경 사항은 저장된다는 것입니다. –

+0

바의 필드를 변경하고 Foo의 필드를 저장하지 않는다면? SQL Server는 업데이트 할 테이블을 하나만 선택하지 않습니다. 뷰를 업데이트하더라도 업데이트에는 하나의 테이블 만 포함될 수 있습니다. 예, 클라이언트 코드는 두 테이블의 필드를 동시에 업데이트 할 수 없기 때문에 모든 이벤트에서 기본 테이블의 구조를 알아야합니다. – HLGEM

관련 문제