none
Identidade SQL Server RRS feed

  • Pergunta

  • Bom dia pessoal, tenho um problema que um usuário iniciante não consegue resolver.

    Eu posso criar 2 nomes iguais em um tabela, um com letras maiúsculas e outro minúsculas.

    Só que ao apagar um, os dois se apagam, teria que dar uma identidade para cada um, para quando eu quizer apagar o da letra maiúscula o outro não apaga? não sei como fazer isso.

    Entenderam o problema?

    segunda-feira, 30 de janeiro de 2012 10:44

Respostas

  • Marrison,

     

    TUdo depende do seu collate, veja:

     

    CREATE TABLE #Teste

    (

          Nome VARCHAR(100) COLLATE Latin1_General_CS_AS

    )

     

    INSERT INTO #Teste VALUES

    ('Fabrizzio'),('fabrizzio')

     

    SELECT *

    FROM #Teste

    WHERE Nome LIKE 'f%'

     

    DELETE FROM #Teste

    WHERE Nome LIKE 'f%'

     

    SELECT *

    FROM #Teste

     

    DROP TABLE #Teste


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    segunda-feira, 30 de janeiro de 2012 10:48
    Moderador
  • Não era bem isso que eu queria, eu quero que cada linha da tabela seja um objeto diferente do outro,aponte para um lugar que é reservado pra ele próprio e quando eu selecionar algum não corra risco de confundir com o outro pois cada um é uma instância diferente da outra.
    segunda-feira, 30 de janeiro de 2012 11:11
  • Morrison, bom dia,

    Vc pode utilizar um ID único em sua tabela. Desta forma ao invés de referenciar o nome no critério de exlcusão, vc pode referenciar o ID que deseja excluir. Desta forma um tabela onde tenha:

    ID 1, João e ID 2 joao

    Se deseja deletar o nome "joao" vc deverá faze-lo


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
    segunda-feira, 30 de janeiro de 2012 11:24
  • Mas como vou fazer esse script com o ID?

     

    Estava fazendo assim para apagar:

    delete from Funcionários where Nome = 'Exempo'

    segunda-feira, 30 de janeiro de 2012 11:27
  • alter table tabela add Novo_ID int identity(1,1)

    Analise também a volumetria de sua tabela e verifique se necessita utilizar um campo com o tamanho maior, neste caso o bigint para criação do campo ID.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
    segunda-feira, 30 de janeiro de 2012 11:28
  • Já tem a coluna ID, só que como vou identificar o número do ID e o Funcionário que eu escolher para excluir?

    delete from Funcionários where nome = 'Teste' and Id = ?????????????

    segunda-feira, 30 de janeiro de 2012 11:32
  • Morrison,

    Como é selecionado o registro para deleção?

    É através de uma aplicação? Ou simplesmente via query? Se for via query, qual o critério que é utliizado para exclusão de dados no banco?

    Quando e como um registro é elegível à exclusão?

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
    segunda-feira, 30 de janeiro de 2012 11:35
  • Morrison J.

     

    Ao executar uma exclusão, se voce quer, garantidamente que apenas uma linha seja excluida, voce tera que deletar pela chave primeira, seja um ID ou uma chave composta de N campos.

    Porem, para voce pegar o ID, voce deve gravalo em uma variavel por exemplo, porem, para gravar nessa variavel a partir de um select, voce deve ter um select que retorne apenas 1 valor, se não voce tera um erro.

    Se voce, colocando o Teste esta vindo mais de um registro, voce tera que ou excluir este grupo inteiro de uma vez sem passar o ID, ou então, tratar de formas diferentes utilizando tabelas temporarias para gravar os dados que voce queira manter por exemplo...


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    segunda-feira, 30 de janeiro de 2012 11:37
    Moderador
  • Existe um Aplicativo para excluir, ele me lista todos os nome em um comboBox, seleciono o que eu quero excluir e pronto.

    Mas quando eu escolho o de nome minúsculo(Existe um de nome maiúsculo também) apagam os dois, então você sugeriu apagar pelo ID

    Mas como eu faço para referenciar o objeto a ser apagado pelo ID???

     

    Teria que ser mais ou menos assim:

    delete from Funcionários where nome = 'Teste' and ID = ???????????????????

    segunda-feira, 30 de janeiro de 2012 11:39
  • Morrison,

     

    Vamos la...

     

    Pouco importa se a exclusão é feita pela aplicação ou uma query pronta, uma vez que o banco de dados só ira entender a query em si, seja de onde for que ela veio.

    O por que do meu primeiro post: Sua aplicação pode diferenciar minusculas e maiusculas, porem isso não quer dizer que sua base de dados fara o mesmo, essa distinção é feita pelo Collate de uma instancia /Base de dados/Coluna (O menor que tiver uma definição propria).

    Quando postei a codificação, a mesma foi feita em coluna, ou seja, colocando CS, ele ira diferenciar maiusculas e minusculas, se sua base estiver CI, ele não fara esta distinção.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    segunda-feira, 30 de janeiro de 2012 11:42
    Moderador
  • Como o Fabrizzio citou, vc precisa armazenar o ID do nome selecionado no comboBox para a exlcusão do registros e não simplesmente referenciar no critério pelo nome. Se houver nomes iguais, vc poderá excluir dados indesejados em sua tabela.

    Veja a linguagem de desenvolvimento que está utilizando e pesquise como armazenar o ID no combo Box.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
    segunda-feira, 30 de janeiro de 2012 11:42

Todas as Respostas

  • Marrison,

     

    TUdo depende do seu collate, veja:

     

    CREATE TABLE #Teste

    (

          Nome VARCHAR(100) COLLATE Latin1_General_CS_AS

    )

     

    INSERT INTO #Teste VALUES

    ('Fabrizzio'),('fabrizzio')

     

    SELECT *

    FROM #Teste

    WHERE Nome LIKE 'f%'

     

    DELETE FROM #Teste

    WHERE Nome LIKE 'f%'

     

    SELECT *

    FROM #Teste

     

    DROP TABLE #Teste


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    segunda-feira, 30 de janeiro de 2012 10:48
    Moderador
  • Não era bem isso que eu queria, eu quero que cada linha da tabela seja um objeto diferente do outro,aponte para um lugar que é reservado pra ele próprio e quando eu selecionar algum não corra risco de confundir com o outro pois cada um é uma instância diferente da outra.
    segunda-feira, 30 de janeiro de 2012 11:11
  • Morrison, bom dia,

    Vc pode utilizar um ID único em sua tabela. Desta forma ao invés de referenciar o nome no critério de exlcusão, vc pode referenciar o ID que deseja excluir. Desta forma um tabela onde tenha:

    ID 1, João e ID 2 joao

    Se deseja deletar o nome "joao" vc deverá faze-lo


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
    segunda-feira, 30 de janeiro de 2012 11:24
  • Mas como vou fazer esse script com o ID?

     

    Estava fazendo assim para apagar:

    delete from Funcionários where Nome = 'Exempo'

    segunda-feira, 30 de janeiro de 2012 11:27
  • alter table tabela add Novo_ID int identity(1,1)

    Analise também a volumetria de sua tabela e verifique se necessita utilizar um campo com o tamanho maior, neste caso o bigint para criação do campo ID.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
    segunda-feira, 30 de janeiro de 2012 11:28
  • Já tem a coluna ID, só que como vou identificar o número do ID e o Funcionário que eu escolher para excluir?

    delete from Funcionários where nome = 'Teste' and Id = ?????????????

    segunda-feira, 30 de janeiro de 2012 11:32
  • Morrison,

    Como é selecionado o registro para deleção?

    É através de uma aplicação? Ou simplesmente via query? Se for via query, qual o critério que é utliizado para exclusão de dados no banco?

    Quando e como um registro é elegível à exclusão?

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
    segunda-feira, 30 de janeiro de 2012 11:35
  • Morrison J.

     

    Ao executar uma exclusão, se voce quer, garantidamente que apenas uma linha seja excluida, voce tera que deletar pela chave primeira, seja um ID ou uma chave composta de N campos.

    Porem, para voce pegar o ID, voce deve gravalo em uma variavel por exemplo, porem, para gravar nessa variavel a partir de um select, voce deve ter um select que retorne apenas 1 valor, se não voce tera um erro.

    Se voce, colocando o Teste esta vindo mais de um registro, voce tera que ou excluir este grupo inteiro de uma vez sem passar o ID, ou então, tratar de formas diferentes utilizando tabelas temporarias para gravar os dados que voce queira manter por exemplo...


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    segunda-feira, 30 de janeiro de 2012 11:37
    Moderador
  • Existe um Aplicativo para excluir, ele me lista todos os nome em um comboBox, seleciono o que eu quero excluir e pronto.

    Mas quando eu escolho o de nome minúsculo(Existe um de nome maiúsculo também) apagam os dois, então você sugeriu apagar pelo ID

    Mas como eu faço para referenciar o objeto a ser apagado pelo ID???

     

    Teria que ser mais ou menos assim:

    delete from Funcionários where nome = 'Teste' and ID = ???????????????????

    segunda-feira, 30 de janeiro de 2012 11:39
  • Morrison,

     

    Vamos la...

     

    Pouco importa se a exclusão é feita pela aplicação ou uma query pronta, uma vez que o banco de dados só ira entender a query em si, seja de onde for que ela veio.

    O por que do meu primeiro post: Sua aplicação pode diferenciar minusculas e maiusculas, porem isso não quer dizer que sua base de dados fara o mesmo, essa distinção é feita pelo Collate de uma instancia /Base de dados/Coluna (O menor que tiver uma definição propria).

    Quando postei a codificação, a mesma foi feita em coluna, ou seja, colocando CS, ele ira diferenciar maiusculas e minusculas, se sua base estiver CI, ele não fara esta distinção.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    segunda-feira, 30 de janeiro de 2012 11:42
    Moderador
  • Como o Fabrizzio citou, vc precisa armazenar o ID do nome selecionado no comboBox para a exlcusão do registros e não simplesmente referenciar no critério pelo nome. Se houver nomes iguais, vc poderá excluir dados indesejados em sua tabela.

    Veja a linguagem de desenvolvimento que está utilizando e pesquise como armazenar o ID no combo Box.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp
    segunda-feira, 30 de janeiro de 2012 11:42