none
Usando o @last_insert_id em tabela sem identity ou auto_incremento RRS feed

  • Pergunta

  • Olá boa tarde.

    Eu estou fazendo um projeto pessoa só para treinar e adquiri conhecimento em C#.

    estou fazendo um software com conexão com banco de dados, eu uso o próprio banco de dados que o VS 2017 fornece.

    Eu tenho duas tabela uma CLIENTE(CELULAR, FIXO, NOME) CELULAR=PK e a outra tabela é 

    ENDERECO(RUA, NUM, COMPL, BAIRRO, CEP, CIDADE, UF, CELULAR) ID_ENDER=PK e CELULAR = FK

    Eu vou fazer usando o @last_insert_into. Minha dúvida é a seguinte a minha chave primaria é o Celular que será digitado pelo usuário e eu to na dúvida se posso usa-lá mesmo ela não sendo um auto-incremento e se do modo que eu fiz está certo 

    esse é o exemplo que eu vi na internet

    string strConn = @"INSERT INTO ETAPA_GRUPO_ENSINO (NOME_GRUPO_ENSINO) VALUES (@NOME_GRUPO_ENSINO);

    DECLARE @LAST_ID AS INT

    SET @LAST_ID = SCOPE_IDENTIY()

    INSERT INTO ETAPA_NIVEL_GRUPO_ITENS (ID_ETAPA_NIVEL_ENSINO,ID_ETAPA_GRUPO_ENSINO) VALUES (@LAST_ID,@ID_ETAPA_NIVEL_ENSINO);";

    E esse é o que vou usar, já com as adaptações

    String sqlQuery = @”INSERT INTO cliente(celular, fixo, nome) VALUES( @celular,@fixo, @nome);

    DECLARE@Ccelular as int

    SET @celular = @celular


    INSERT INTO endereco(rua, num, compl, bairro, cidade, uf, celular) VALUES(@celular, @rua, @num,@compl,@bairro,cidade, @uf);”;





    segunda-feira, 5 de novembro de 2018 13:27

Respostas

  • Olá. Estou passando abaixo um exemplo que utilizo.

    criacao da tabela - utilize um banco de exemplo

    CREATE TABLE [dbo].[TB_USUARIO](
    [COD_USUARIO] [smallint] IDENTITY(1,1) NOT NULL,
    [DSC_NOME_USUARIO] [varchar](30) NULL,
     CONSTRAINT [TB_USUARIO_PK] PRIMARY KEY CLUSTERED 
    (
    [COD_USUARIO] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    --- sql para voce pegar o identity

    DECLARE  @COD_USUARIO INT, @DSC_NOME_USUARIO VARCHAR(100)
    SET @DSC_NOME_USUARIO = 'ASSAS'
    SET @COD_USUARIO = 0;
    IF NOT EXISTS (SELECT 1 FROM dbo.TB_USUARIO WITH(NOLOCK) WHERE DSC_NOME_USUARIO = @DSC_NOME_USUARIO)
    BEGIN 
    set @COD_USUARIO = 0; 
    INSERT INTO dbo.TB_USUARIO ( DSC_NOME_USUARIO) 
    VALUES (@DSC_NOME_USUARIO) 
    set @COD_USUARIO = (select @@IDENTITY); 
    END 
    SELECT @COD_USUARIO

    espero que te ajude.

    • Marcado como Resposta AfonsoVieira segunda-feira, 5 de novembro de 2018 23:44
    segunda-feira, 5 de novembro de 2018 20:55

Todas as Respostas

  • Olá. Estou passando abaixo um exemplo que utilizo.

    criacao da tabela - utilize um banco de exemplo

    CREATE TABLE [dbo].[TB_USUARIO](
    [COD_USUARIO] [smallint] IDENTITY(1,1) NOT NULL,
    [DSC_NOME_USUARIO] [varchar](30) NULL,
     CONSTRAINT [TB_USUARIO_PK] PRIMARY KEY CLUSTERED 
    (
    [COD_USUARIO] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]

    --- sql para voce pegar o identity

    DECLARE  @COD_USUARIO INT, @DSC_NOME_USUARIO VARCHAR(100)
    SET @DSC_NOME_USUARIO = 'ASSAS'
    SET @COD_USUARIO = 0;
    IF NOT EXISTS (SELECT 1 FROM dbo.TB_USUARIO WITH(NOLOCK) WHERE DSC_NOME_USUARIO = @DSC_NOME_USUARIO)
    BEGIN 
    set @COD_USUARIO = 0; 
    INSERT INTO dbo.TB_USUARIO ( DSC_NOME_USUARIO) 
    VALUES (@DSC_NOME_USUARIO) 
    set @COD_USUARIO = (select @@IDENTITY); 
    END 
    SELECT @COD_USUARIO

    espero que te ajude.

    • Marcado como Resposta AfonsoVieira segunda-feira, 5 de novembro de 2018 23:44
    segunda-feira, 5 de novembro de 2018 20:55
  • Muito obrigado vai me ajudar muito.
    segunda-feira, 5 de novembro de 2018 23:45