Usuário com melhor resposta
Inserir dados simultanemante em varias tabelas atraves de view

Pergunta
-
Tenho duas tabelas: clientes e pedidos
CREATE TABLE Clientes ( Cli_ID INT IDENTITY(1,1) PRIMARY KEY, Nome varchar (20), Cidade varchar(20) ); CREATE TABLE Pedidos( PedidoID INT IDENTITY(1,1) PRIMARY KEY, Cli_ID INT REFERENCES Clientes(Cli_ID), ValorPedido decimal (10,2), DataPedido smalldatetime DEFAULT(GETDATE())); e a seguinte view: CREATE VIEW vw_clientes_pedidos AS SELECT cli.Cli_ID,cli.nome, ped.ValorPedido, ped.Datapedido FROM Clientes cli INNER JOIN Pedidos ped ON cli.Cli_ID = ped.Cli_ID GO
Eu quero saber como inserir os dados simultaneamente nas tabelas atraves da view. Quebrei a cabeça e nao consegui.
Respostas
-
Olá Daniel,
Independente de como será feito as inserções você terá que escrever os scripts INSERT, o que vai mudar neste caso é a forma como eles serão executados, você poderá fazer por Triggers, Procedures ou dependendo da situação por MERGE.
Mas de qualquer forma terá que escrevê-los, se precisa atualizar várias tabelas de uma vez pode fazer uma procedure que faça estas inserções em lote, mas ai depende da regra do seu negócio.
David Silva | MCITP| MCTS | MCP | ITILF | Blog: http://tilive.wordpress.com
- Sugerido como Resposta Eder Costa quarta-feira, 29 de fevereiro de 2012 15:04
- Marcado como Resposta Eder Costa quarta-feira, 29 de fevereiro de 2012 15:06
-
Daniel,
Concordo com o David Silva, para este tipo de processo, você terá que implementar alguma rotina que possa aplicar suas regras de negócio.
Com o trigger também é possível realizar estes tipos de implementações, mas o trigger trabalha sempre em uma tabela e dentro do bloco de transações em que esta tabela esta sendo manipulada.
Acredito que para este tipo de situação a melhor alternativa é fazer uso de uma stored procedure.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Sugerido como Resposta Eder Costa quarta-feira, 29 de fevereiro de 2012 15:05
- Marcado como Resposta Eder Costa quarta-feira, 29 de fevereiro de 2012 15:06
Todas as Respostas
-
Olá Daniel,
Este não é o conceito de um View(Visão), se você quer inserir dados oriundos de uma View tudo bem, mas o fará utilizando um comando INSERT que não é permitido dentro da view.
O que você poderá fazer é algo semelhante a:
INSERT [TABELA] (COLUNAS) SELECT (COLUNAS) FROM VIEW
David Silva | MCITP| MCTS | MCP | ITILF | Blog: http://tilive.wordpress.com
-
"Com a trigger criada sobre a view, temos agora a capacidade de fazer INSERT
sobre as tabelas (neste exemplo estamos usando apenas a tabela Pedidos)
utilizando a view. " (artigo devmedia)Então eu comenti o erro de interpretação.
rs
- Editado Daniel O. Farias sexta-feira, 10 de fevereiro de 2012 02:46 fdf
-
Tenho um projeto em java, há várias tabelas relacionadas, como eu faço para inserir dados em todas as tabelas de uma vez só, sem ter que fazer "insert int tbl1 (campos) values (); insert int tbl2 (campos) values (); insert int tbl3 (campos) values ();"
Vai dá uma trabalheira desgramada. Existe alguma forma de simplificar esse processo?
-
Olá Daniel,
Independente de como será feito as inserções você terá que escrever os scripts INSERT, o que vai mudar neste caso é a forma como eles serão executados, você poderá fazer por Triggers, Procedures ou dependendo da situação por MERGE.
Mas de qualquer forma terá que escrevê-los, se precisa atualizar várias tabelas de uma vez pode fazer uma procedure que faça estas inserções em lote, mas ai depende da regra do seu negócio.
David Silva | MCITP| MCTS | MCP | ITILF | Blog: http://tilive.wordpress.com
- Sugerido como Resposta Eder Costa quarta-feira, 29 de fevereiro de 2012 15:04
- Marcado como Resposta Eder Costa quarta-feira, 29 de fevereiro de 2012 15:06
-
Daniel,
Concordo com o David Silva, para este tipo de processo, você terá que implementar alguma rotina que possa aplicar suas regras de negócio.
Com o trigger também é possível realizar estes tipos de implementações, mas o trigger trabalha sempre em uma tabela e dentro do bloco de transações em que esta tabela esta sendo manipulada.
Acredito que para este tipo de situação a melhor alternativa é fazer uso de uma stored procedure.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Sugerido como Resposta Eder Costa quarta-feira, 29 de fevereiro de 2012 15:05
- Marcado como Resposta Eder Costa quarta-feira, 29 de fevereiro de 2012 15:06