SQL SERVER 2008 Inserindo dados em uma tabela.

SQL Server

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

Cleiton Conceição

Curtidas 0

Melhor post

Randrade

Randrade

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.
GOSTEI 2

Mais Respostas

Mariana Carvalho

Mariana Carvalho

30/06/2015

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.
GOSTEI 0
Cleiton Conceição

Cleiton Conceição

30/06/2015

Todos os campos. quero fazer um insert direto no banco.
GOSTEI 0
Randrade

Randrade

30/06/2015

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.
GOSTEI 0
Mariana Carvalho

Mariana Carvalho

30/06/2015

Super novidade pra mim, pois nunca vi situação assim, principalmente material de estudo.
GOSTEI 0
Cleiton Conceição

Cleiton Conceição

30/06/2015

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.
GOSTEI 0
Lucas Ramos

Lucas Ramos

30/06/2015

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

GOSTEI 0
Cleiton Conceição

Cleiton Conceição

30/06/2015

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.
GOSTEI 0
Lucas Ramos

Lucas Ramos

30/06/2015

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
GOSTEI 0
Randrade

Randrade

30/06/2015

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.
GOSTEI 0
Cleiton Conceição

Cleiton Conceição

30/06/2015

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.
GOSTEI 0
POSTAR