Usuário com melhor resposta
Insert e update para atualizar tabela no SQL server.

Pergunta
-
Galera,
Estou com dificuldades no SQL server ( Stored procedure )
Preciso verificar se existe tabela resposta se jpa existir fazer um update(atualizar esse tabela)
Se não existir inserir tabela.
Tentei fazer, porem nao sei se a sintaxe esta correta pois não esta rodando.
USE [Northwind] GO /****** Object: StoredProcedure [dbo].[spInsertResposta] Script Date: 03/15/2012 09:30:55 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[spInsertResposta] @id_pergunta int, @id_formulario int, @id_planoAcao int = null, @Valor int, @id_responsavel int as declare @id_resposta int if @id_planoAcao =0 set @id_planoAcao = null select @id_resposta=isnull(max(id_resposta)+1,1) from resposta if (select * from resposta where id_resposta= @id_resposta) begin update resposta set id_resposta=@id_resposta,id_pergunta=@id_pergunta,id_formulario=@id_formulario, Id_planoAcao=@Id_planoAcao, valor=@valor,Id_responsavel=@Id_responsavel end else begin insert into resposta (id_resposta,id_pergunta,id_formulario, Id_planoAcao, valor, Data, Id_responsavel) values (@id_resposta,@id_pergunta,@id_formulario,@Id_planoAcao,@valor,getDate(),@Id_responsavel) end
Respostas
-
Olá Raquel,
Você só precisa verificar se uma determinada tabela existe? Nós podemos usar o operador EXISTS. Segue um exemplo:
IF EXISTS (SELECT NAME FROM SYS.OBJECTS WHERE name = 'TESTE') BEGIN PRINT ('JA EXISTE') DROP TABLE TESTE END ELSE BEGIN CREATE TABLE TESTE( ID INT ) PRINT ('TABELA CRIADA') END
Este operador poderá ser usado com indexes, procedures, functions etc.
Você precisará apenas conhecer as dmv's corretas, por exemplo:
SYS.OBJECTS, SYS.INDEXES, SYS.PROCEDURES etc...
abraços.
Se útil, Classifique.
Dhiego Piroto - MCP | MCTS SQL Server 2008 Developer | Email: dhiegopiroto@gmail.com é de SP e Vai ao SQL Saturday #127?
- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 15 de março de 2012 18:07
- Marcado como Resposta Raquel Santin quarta-feira, 21 de março de 2012 14:37
Todas as Respostas
-
Olá Raquel,
Você só precisa verificar se uma determinada tabela existe? Nós podemos usar o operador EXISTS. Segue um exemplo:
IF EXISTS (SELECT NAME FROM SYS.OBJECTS WHERE name = 'TESTE') BEGIN PRINT ('JA EXISTE') DROP TABLE TESTE END ELSE BEGIN CREATE TABLE TESTE( ID INT ) PRINT ('TABELA CRIADA') END
Este operador poderá ser usado com indexes, procedures, functions etc.
Você precisará apenas conhecer as dmv's corretas, por exemplo:
SYS.OBJECTS, SYS.INDEXES, SYS.PROCEDURES etc...
abraços.
Se útil, Classifique.
Dhiego Piroto - MCP | MCTS SQL Server 2008 Developer | Email: dhiegopiroto@gmail.com é de SP e Vai ao SQL Saturday #127?
- Sugerido como Resposta Junior Galvão - MVPMVP quinta-feira, 15 de março de 2012 18:07
- Marcado como Resposta Raquel Santin quarta-feira, 21 de março de 2012 14:37
-
-
O if está aguardando um resultado booleano.
Por favor, analise a regra de negócio para a comparação deste if. Se tiver dificuldades na sintaxe, coloque a regra de negócio em um novo post que te auxilio no código.
Abs.
Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
-
Raquel boa tarde
Pela lógica da sua procedure, ela sempre executará um insert pois vc está sempre lendo o maior valor de id_resposta e incrementando. E caso voce a sua proc fizesse upadte e insert, o Eduardo está correto pois vc deveria usar a clasula EXISTS junto com o seu select
if Exists (select * from resposta where id_resposta= @id_resposta)
...[]
-
Raquel,
Uma observação, você realmente precisa fazer um Select * neste comando IF?
Se deseja fazer uma análise não seria o caso somente de utilizando neste campo condicional uma única coluna ao invês do asterisco?
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]
-
Bom Dia,
Não seria o caso de usar o MERGE ?
[ ]s,
Gustavo Maia Aguiar
Blog: http://gustavomaiaaguiar.wordpress.com
Vídeos:http://www.youtube.com/user/gmasqlClassifique as respostas. O seu feedback é imprescindível