none
Criação e alteração de tabelas que referência a outras tabelas usando @Table RRS feed

  • Pergunta

  • Pessoal, uma pequena dúvida.

    Estou tentando executar as consultas abaixo e o SQL Server retorna o seguinte erro:

    "Sintaxe incorreta próxima a '@table3'" e "Sintaxe incorreta próxima a '@table1'"

    create table table1 ( 
    table1_t_id int not null, 
    table1_t_table1_cod @table1.table1_cod not null, 
    table1_t_descr varchar (100) not null, 
    table1_t_nivel int not null, 
    constraint table1_pk primary key ( table1_t_id ),
    constraint table1_table1_fk foreign key ( table1_t_table1_cod )
    references table1 ( table1_cod ) ) ;
    
    
    alter table table2 add table2_calc_preco_table3_num @table3.table3_num null ;

    Identifiquei que na criação e alteração das tabelas existe uma referência a outras tabelas existentes no banco, no qual utiliza @.

    Gostaria de saber o porque o erro e se essa referência esta correta, pois nunca utilizei desta forma na criação e alteração de tabelas.

    Agradeço à todos desde já!


    sexta-feira, 3 de outubro de 2014 14:40

Respostas

  • Jerfeson,

    segue a sintaxe correta. Parece que você está tentando criar um auto relacionamento. Recomendo que você use a própria chave da tabela como referência, ao invés de criar um campo novo só para isso.

    CREATE TABLE dbo.Table_1
    	(
    	table1_t_id int NOT NULL,
    	table1_t_table1_cod int NOT NULL,
    	table1_t_descr varchar(100) NOT NULL,
    	table1_t_nivel int NOT NULL,
    	table1_cod int NOT NULL
    	)  
    GO
    
    ALTER TABLE dbo.Table_1 ADD CONSTRAINT
    	PK_Table_1 PRIMARY KEY CLUSTERED 
    	(
    	table1_t_id
    	) 
    
    GO
    ALTER TABLE dbo.Table_1 ADD CONSTRAINT
    	table1_table1_fk FOREIGN KEY 
    	(
    	table1_t_table1_cod
    	) REFERENCES table_1
    	(table1_cod)
    
    
    

    sexta-feira, 3 de outubro de 2014 17:49
  • Jerfeson,

    porque a sintaxe está incorreta. Tente criar a tabela usando o script que eu lhe enviei anteriormente, e veja se atende a sua demanda.


    sexta-feira, 10 de outubro de 2014 22:05

Todas as Respostas

  • Jerfeson,

    segue a sintaxe correta. Parece que você está tentando criar um auto relacionamento. Recomendo que você use a própria chave da tabela como referência, ao invés de criar um campo novo só para isso.

    CREATE TABLE dbo.Table_1
    	(
    	table1_t_id int NOT NULL,
    	table1_t_table1_cod int NOT NULL,
    	table1_t_descr varchar(100) NOT NULL,
    	table1_t_nivel int NOT NULL,
    	table1_cod int NOT NULL
    	)  
    GO
    
    ALTER TABLE dbo.Table_1 ADD CONSTRAINT
    	PK_Table_1 PRIMARY KEY CLUSTERED 
    	(
    	table1_t_id
    	) 
    
    GO
    ALTER TABLE dbo.Table_1 ADD CONSTRAINT
    	table1_table1_fk FOREIGN KEY 
    	(
    	table1_t_table1_cod
    	) REFERENCES table_1
    	(table1_cod)
    
    
    

    sexta-feira, 3 de outubro de 2014 17:49
  • Olá Jeferson,

    Não sei se entendi bem a sua dúvida, mas vou tentar.

    O @table3.table3_num pelo que eu entendi é um tipo criado pelo usuário como

    se fosse um varchar, char etc.. ele fica localizado nesse caminho abaixo, verifique se ele existe,

    pode ser que somente os outros foram criados e esse @table3 não tenha sido criado

    http://alinebaffi.blogspot.com.br/

    alter table table2

    add table2_calc_preco_table3_num @table3.table3_num null ;

    sexta-feira, 3 de outubro de 2014 18:38
  • Na verdade o pessoal de desenvolvimento que enviou essa atualização necessária a ser feita no BD, porém estranhei, pois nunca tinha visto as condições citadas acima. Para não retornar sem antes analisar o propósito do @table, decidir postar aqui pra os colegas me darem um help.

    Bem Aline, não existe tipo de dado criado. O que entendi no primeiro momento que recebi as instruções é que o pessoal de desenvolvimento quer criar uma nova tabela referenciando a coluna desta criada a uma outra coluna de tabela já existente e adicionar um novo campo de uma tabela referenciando a coluna de outra tabela. Seria a mesma idéia que Samir propôs.

    Estou certo sobre o meu ponto de vista, pois nas pesquisas que realizei não identifiquei nada parecido ainda?

    sábado, 4 de outubro de 2014 21:10
  • Estou certo sobre o meu ponto de vista, pois nas pesquisas que realizei não identifiquei nada parecido ainda?

    Jerfeson,

    sim, auto-relacionamento é um modelo válido. Você deve criar um segundo campo que irá armazenar o valor da chave estrangeira, e referenciar a própria PK da tabela. O que não deve ser feito é criar um terceiro campo, como uma PK alternativa, apenas para ser usado com o auto-relacionamento.

    segunda-feira, 6 de outubro de 2014 14:17
  • Desculpa Samir, mas não conseguir compreender como resolver a mensagem de erro:

    "Sintaxe incorreta próxima a '@table3'" e "Sintaxe incorreta próxima a '@table1'"

    Entendo que existe sim o auto-relacionamento como modelo válido, mas se é valido o porque não funcionou a execução na criação e alteração da tabela?

    sexta-feira, 10 de outubro de 2014 18:58
  • Jerfeson,

    porque a sintaxe está incorreta. Tente criar a tabela usando o script que eu lhe enviei anteriormente, e veja se atende a sua demanda.


    sexta-feira, 10 de outubro de 2014 22:05
  • Justamente Samir e a forma seria a que sugeriu mesmo, mas apenas queria entender se a forma sugerida pelos desenvolvedores era válida, pois tinha visto ainda a criação de tabela usando variável sem declaração.

    Vou avisar a galera de developers e aviso aqui.

    Obrigado!

    segunda-feira, 13 de outubro de 2014 11:39
  • Estava de fato incorreta.

    Ajustei feito.

    Obrigado pelo help de todos.

    sexta-feira, 21 de novembro de 2014 13:53