Como determinar qual tabela de uma visão multitable são atualizáveis?

votos
1

UPDATE: O meu problema não parece estar com o servidor SQL. I executou uma instrução de atualização no banco de dados manualmente contra a visão e eu era capaz de atualizar a tabela de Bar. Eu vou fechar esta e pesquisar os OleDbDataAdapters mais desde que eu acho que o problema está com eles.

Esta questão aplica-se a MS SQL Server 2000. Como faço para determinar qual tabela da visualização multitable pode ser modificado?

Eu tenho o seguinte ponto de vista:

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

Quando eu atualizar este ponto de vista, (usando OleDbDataAdapters VB.NET), eu posso atualizar colunas de Foo, mas não colunas de Bar. Minha investigação sobre este me diz que em uma visão multitable como esta que servidor MS SQL só permite que você atualizar uma das mesas. Então, minha pergunta é, como é que servidor SQL determinar qual tabela pode ser atualizado?

Eu tentei um teste onde eu editar os campos de uma linha específica do ponto de vista. Depois disso, eu usei o OleDbDataAdapter para atualizar a vista. Somente as edições para a tabela de Foo foram aceites. As edições em mesa de bar foram ignorados (sem exceção lançada).

Existe uma maneira de prever qual das tabelas podem ser atualizados ou uma forma de controlar qual? E se eu quisesse Bar para ser a tabela atualizável em vez de Foo?

Update: Eu encontrei este no Google, MS SQL Server 2000 Unleased:

http://books.google.com/books?id=G2YqBS9CQ0AC&pg=RA1-PA713&lpg=RA1-PA713&dq=ms+sql+server+ multitable + ler ++ atualizados & source = bl & OTS = ZuQXIlEPbO & sig = JbgdDe5yU73aSkxh-SLDdtMYZDs & hl = en & ei = b- 0SSq-aHZOitgPB38zgDQ & sa = X & oi = book_result & ct = resultado & resnum = 1 # PRA1-PA713, M1

(Por alguma razão o URL Eu estou tentando colar não funciona com este site, pena que você tem que copiar e colar.)

Que diz:

  • Uma atualização através de uma visão multitable não pode afetar mais de uma tabela de base subjacente.
  • A exclusão não pode ser executada contra vista multi-table.

Mas, eu ainda não ver uma resposta à minha pergunta.

Mais uma vez, a minha pergunta é:

Como faço para determinar qual tabela da visualização multitable pode ser modificado?

Sei que posso escrever duas instruções de atualização um para cada mesa. Minha preocupação é diferente. Eu preciso auditar o código que usa vistas como o descrito acima e faz atualizações sobre os pontos de vista. Eu estava esperando para encontrar uma maneira de determinar quais partes das atualizações será ignorado.

Exemplo:

Eu editar Bar.Column1 e, em seguida, chamar o método Update () do OleDbDataAdapter. Isso resulta em mesa de bar não sendo modificado nem é uma exceção lançada. Se eu editar Foo.Column2 então chamada Update () tabela de Foo não se modificam.

Publicado 19/05/2009 em 18:12
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

Você pode atualizar qualquer tabela na vista, mas apenas os campos que estão todos na mesma mesa em que a declaração. Se você precisa atualizar os campos de duas tabelas em uma visualização, em seguida, você deve escrever duas instruções de atualização.

Pessoalmente eu prefiro não atualizar ou excluir visualizações em tudo. Eu uso as tabelas base para isso.

Há também regras sobre se vista é updateble. Veja Livros online. Pesquisar este: vista-SQL Server, modificar dados

Respondeu 19/05/2009 em 19:16
fonte usuário

votos
-1

Você precisa ser capaz de identificar exclusivamente a linha na tabela, retornando a chave primária. Tentar retornar dbo.Bar.Ida vista, e você deve ser capaz de editar as colunas na tabela Bar.

Respondeu 19/05/2009 em 18:17
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more