SQL SERVER 2008 Inserindo dados em uma tabela.

30/06/2015

Boa noite a todos, estou com um seguinte problema.
tenho uma tabela com a seguinte estrutura
CREATE TABLE PAT_TIPO_ENTRADA (
TPE_COD INT IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
TPE_NOME VARCHAR(100),
TPE_NUMERO VARCHAR(15),
TPE_POSSE CHAR(1),
TPE_DOACAO CHAR(1)
)

e nela já existe os dados vou dar como exemplo : 1,FTC,2,S,N
o negocio é o seguinte, eu quero dar um insert nessa mesma tabela só que o insert tem que verificar se já existe essa informação na tabela e se não existe ele inseri os dados, caso exista ele não faz nada.

Cleiton Conceição

Melhor resposta

01/07/2015

Como não explicou detalhadamente, vou dar um exemplo genérico. Porém, você poderia criar um trigger, ou indexs. Mas vamos com uma "funçãozinha" básica.

--Cria Tabela
CREATE TABLE TbTeste
 (id int, nome varchar(10), tel varchar(10));
GO

--Declara variáveis
Declare @id int, @nome varchar(10), @tel varchar(10)

--Seta os valores do insert nas variáveis
set @id = '1'
set @nome = 'Cleiton'
set @tel = '11111111'

--Busca se um valor já existe (estou setando isso na cláusula where)
If Exists (Select * from TbTeste where id = @id or nome=@nome or tel = @tel )
begin
	 --Se o valor existir, exibe mensagem
     print ('Já existe um valor cadastrado')
 end
else
 begin
   --Se o valor não existir, realiza o insert
   Insert into TbTeste (id,nome,tel) values (@id,@nome,@tel)
select * from TbTeste
end


Eu já coloquei a explicação no próprio código. Se precisar de mais explicações, avisa que tento ser mais claro.

Randrade

Responder Citar

Outras Respostas

01/07/2015

Mariana Carvalho

Quam o campo deseja que não se repita? As chaves primaria já impoem isso, que pelo menos o código não se repita.
Responder Citar

01/07/2015

Cleiton Conceição

Todos os campos. quero fazer um insert direto no banco.
Responder Citar

01/07/2015

Randrade

Todos os campos. quero fazer um insert direto no banco.


Todos os campos devem ser diferentes? Nome, número, posse e doação?

CREATE TABLE PAT_TIPO_ENTRADA (
TPE_COD INT IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
TPE_NOME VARCHAR(100),
TPE_NUMERO VARCHAR(15),
TPE_POSSE CHAR(1),
TPE_DOACAO CHAR(1)
)


P.S: Utilize a tag code </>, ao postar algum código em suas perguntas ou respostas.
Responder Citar

01/07/2015

Mariana Carvalho

Super novidade pra mim, pois nunca vi situação assim, principalmente material de estudo.
Responder Citar

02/07/2015

Cleiton Conceição

man, é exatamente o que eu queria fazer.
só tem um porém eu quero inserir vários dados e não to conseguindo.

tipo assim.
set @TPE_NOME = 'c,''cc'
set @TPE_NUMERO = '4','5'
set @TPE_POSSE = 'rs,''t'
set @TPE_DOACAO='k','o'

ta dando erro de sintaxe.
Responder Citar

03/07/2015

Riechelmann

Segue como eu faria

insert into PAT_TIPO_ENTRADA (
      TPE_NOME ,
	  TPE_NUMERO,
	  TPE_POSSE,
	  TPE_DOACAO)
   select a.TPE_NOME ,
	      a.TPE_NUMERO,
	      a.TPE_POSSE,
	      a.TPE_DOACAO
     from TABELA_DE_ONDE_VEM_OS_DADOS a 
left JOIN PAT_TIPO_ENTRADA            b on a.TPE_NOME = b.TPE_NOME
	                                   and a.TPE_NUMERO = b.TPE_NUMERO
	                                   and a.TPE_POSSE = b.TPE_POSSE
									   and a.TPE_DOACAO = b.TPE_DOACAO
    where b.TPE_COD is null

Responder Citar

03/07/2015

Cleiton Conceição

man, esse código não seria útil. pq o que eu estou fazendo vai ser executado em outra base, eu só quero fazer essa condição pq não tenho certeza se lá já existe essa tabela com esses dados.
Responder Citar

03/07/2015

Riechelmann

Se for sql para sql da para fazer por linked server

insert into [192.168.0.1].[BANCO_DE_DADOS].[dbo].[PAT_TIPO_ENTRADA] (
      TPE_NOME ,
      TPE_NUMERO,
      TPE_POSSE,
      TPE_DOACAO)
   select a.TPE_NOME ,
          a.TPE_NUMERO,
          a.TPE_POSSE,
          a.TPE_DOACAO
     from TABELA_DE_ONDE_VEM_OS_DADOS a 
left JOIN [192.168.0.1].[BANCO_DE_DADOS].[dbo].[PAT_TIPO_ENTRADA] b on a.TPE_NOME = b.TPE_NOME
                                       and a.TPE_NUMERO = b.TPE_NUMERO
                                       and a.TPE_POSSE = b.TPE_POSSE
                                       and a.TPE_DOACAO = b.TPE_DOACAO
    where b.TPE_COD is null


se for na mesma instância

insert into [BANCO_DE_DADOS]..[PAT_TIPO_ENTRADA] (
      TPE_NOME ,
      TPE_NUMERO,
      TPE_POSSE,
      TPE_DOACAO)
   select a.TPE_NOME ,
          a.TPE_NUMERO,
          a.TPE_POSSE,
          a.TPE_DOACAO
     from TABELA_DE_ONDE_VEM_OS_DADOS a 
left JOIN [BANCO_DE_DADOS]..[PAT_TIPO_ENTRADA] b on a.TPE_NOME = b.TPE_NOME
                                       and a.TPE_NUMERO = b.TPE_NUMERO
                                       and a.TPE_POSSE = b.TPE_POSSE
                                       and a.TPE_DOACAO = b.TPE_DOACAO
    where b.TPE_COD is null
Responder Citar

04/07/2015

Randrade

Cleiton, realmente acho q forma que o Lucas Riechelmann Ramos postou melhor para seu cenário. Caso não consiga ou tenha dificuldades, avise que adequo o que eu postei.
Responder Citar

04/07/2015

Cleiton Conceição

Vou explicar novamente...
no local onde vai ser executado o código não tenho acesso. e n sei se existe esses dados na tabela.
o exemplo de lucas não me ajuda pq ele quer pegar os dados de uma tabela para outra e verificar se existe a informação ou não.
Responder Citar