Array
(
)

Identity - Como dar um comando set identity_insert

Rounilo
   - 15 nov 2004

Senhores, tenho que incluir em uma tabela, registros de um arquivo.
Crio esta tabela informando que o campo CODIGO (integer) será a chave primaria e será tambem um campo IDENTITY.
Meu ambiente é o Delphi7 com Ms SqlServer (MSDE).
O problema que estou tendo é que os registros do arquivo já possuem um valor para o campo codigo e portanto tenho que colocar este valor na tabela.

Para que esta inclusão seja possível tenho que dar o comando SET IDENTITY_INSERT nometabela ON.

Como são muitos registros a incluir, fiz um programa em DELPHi que le o arquivo externo e inclui os registros usando ADOQuery.Open, Adoquery.insert, Adoquery.post e adoquery.close.

Eu não sei, como, neste ambiente, dar o comando SET.

Por se tratar de um comando transact-sql penso que não posso inseri-lo em um Sql normal. Ou será que posso ??

Agradeço qualquer ajuda.
Rounilo


Marcus.magalhaes
   - 15 nov 2004

Boa tarde.

Por que vc não usa o DTS, que facilitaria a importação dos dados, pois conseguiria trazer todos?

Att,


Rounilo
   - 17 nov 2004

Marcus, embora já tenha usado o DTS para algumas transferencias, este software não é muito simples, para iniciantes no seu uso. O DTS, po ser bem abrangente, nos leva a ter que conhecer bem esta ´linguagem´. Um dos problemas que eu sempre encontro eh no uso de arquivos textos. O que tenho feito, para driblar esta dificuldade, eh primeiro tranformar o arquivo em uma planilha EXCEL e depois usar o DTS para importar dados para uma base de dados SQL SERVER.

Olhe, desenvolver uma pequena aplicação no DELPHI para fazer a transferencia de dados externos eh muito simples e rápida, principalmente com as funções de copy e paste ao nosso dispor. De quebra ainda posso aproveitar para fazer algumas consistências de dados. Reitero, não estou dizendo que esta minha opção seja a melhor e acredito que não seja.

Voltando ao problema IDENTITY, com o DTS vou poder inserir nos campos identity os valores que existem nos registros antigos ????

Abusando do seu ouvido (no caso olhos), usei o Query analiser para setar
o Identity como ON e percebi que ele fica setado mesmo que eu saia do QA. Vou para o meu Programa e o executo. no momento do Adoquery.Open tudo ok. Quando vou mover os dados para o campo recebo a mensagem me informando que dados não podem ser movidos para campo IDENTITY. Por Que, pergunto eu, se o Identity esta setado On.

Para aumentar minhas dúvidas, faço o inverso, Set o identity para OFF, via QA e retiro o movimento de dados para o Identity. O sistema me responde que tenho que informar os valores do campo identity.

Bom. Não sei se Vc vai me dar algum help para o uso do DTS. Vou estudar este software.

De qualquer forma agradeço sua ajuda e o parabeniso pelo esforço e dedicação que vc dispensa aeste Site. Procuro ler quase todos os tópicos e sempre encontro, neles, a sua ajuda.

SDS
Rounilo


Marcus.magalhaes
   - 17 nov 2004

Boa noite Rounilo.

Vamos lá, por partes :

- Realmente o DTS é um pouco complicado de usar no começo, mas depois q vc pega o jeito, verá que ele é fácil e ajuda mto.
- O Set Identity_Insert se executado dentro de uma procedure, vale somente durante a execução da mesma, portanto cabe fazer um teste se quando o comando vem da aplicação o SQL Server não tratará da mesma forma.
- Para utilizar o DTS para ler arquivos TXT, utilize o EM, ele facilita a vida de quem ainda está aprendendo pq é bastante gráfico e vc não precisa num primeiro momento, saber qual objeto escolher, então, na hora que vc está definindo o DATA SOURCE, escolhe TEXT FILE e informe o caminho. informe se o texto é delimitado ou tam.fixo e os outro itens que ele pede, é bem simples. informe o tipo de delimitador (se estiver escolhido delimitado). informe o DATA SOURCE do destino como SQL Server, o servidor, o usuário e senha ou se windows authentication, e o db que deseja guardar a informação. Após isso será só escolher a tabela destino e pronto.

Obrigado pelos parabéns, estou procurando só ajudar, pois parto do principio q conhecimento deve sempre ser compartilhado. E é um prazer responder pq pode estar certo que eu tb aprendo.

Att,