Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Duvica com o exec de uma procedure

Boa tarde, como criar uma procedure que aceite o parâmetro 'GETDATE' ao especificar no exec?

Eu criei uma procedure de INSERT,SELECT,UPDATE E DELETE, para uma tabela de Usuário. Contudo não consigo executar o parâmetro 'GETDATE' na declaração diz que não consegue converter mas o campo foi definido como datetime. Além disso, a unica forma da qual consegui fazer funcionar foi especificando manualmente a data atual EX: '2020-05-07'

Segue o código abaixo.

ALTER PROCEDURE [dbo].[spCRUDLogin]
(
@StatementType nvarchar(20)='',
@ID integer,
@Usuario varchar(60),
@Senha varchar(60),
@Nome varchar(60),
@Email varchar(60),
@Telefone varchar(15),
@Dt_inclusao datetime,
@Dt_alteracao datetime)
AS
    BEGIN
        IF @StatementType='Insert'
            BEGIN
                INSERT INTO TbCADLogin
                            (ID,
                             Usuario,
                             Senha,
                             Nome,
                             Email,
                             Telefone,
                             Dt_inclusao,
                             Dt_alteracao)
                VALUES        (@ID,
                             @Usuario,
                             @Senha,
                             @Nome,
                             @Email,
                             @Telefone,
                             @Dt_inclusao,
                             @Dt_alteracao)
END
    IF @StatementType='Select'
        BEGIN
            SELECT *
            FROM TbCADLogin
END
    IF @StatementType = 'Update'
        BEGIN
            UPDATE TbCADLogin
            SET    Usuario = @Usuario,
                Senha = @Senha,
                Nome = @Nome,
                Email = @Email,
                Telefone = @Telefone,
                Dt_inclusao = @Dt_inclusao,
                Dt_alteracao = @Dt_alteracao
            WHERE ID = @ID
END
    ELSE IF @StatementType='Delete'
        begin
            delete from TbCADLogin
            where ID = @ID
        END
END

Utilizando o comando INSERT e especificando o parâmetro GETDATE resultado:

Msg 8114, Level 16, State 5, Procedure dbo.spCRUDLogin, Line 0 [Batch Start Line 3]
Erro ao converter tipo de dados nvarchar em datetime.

Eu gostaria de poder utilizar o GETDATE no campo Dt_inclusao, alguem pode me ajudar?

Obrigado!

3 respostas
solução!

Olá Fernando, tudo bem? Nesse caso você quer apenas pegar a data atual, que é o GETDATE() retorna no formatado DATETIME e inserir no campo Dt_inclusao correto? Então você pode simplesmente colocar o GETDATE() diretamente da seguinte forma:

BEGIN
                INSERT INTO TbCADLogin
                            (ID,
                             Usuario,
                             Senha,
                             Nome,
                             Email,
                             Telefone,
                             Dt_inclusao,
                             Dt_alteracao)
                VALUES        (@ID,
                             @Usuario,
                             @Senha,
                             @Nome,
                             @Email,
                             @Telefone,
                             GETDATE(),
                             @Dt_alteracao)

E pode fazer da mesma forma no UPDATE:

UPDATE TbCADLogin
            SET    Usuario = @Usuario,
                Senha = @Senha,
                Nome = @Nome,
                Email = @Email,
                Telefone = @Telefone,
                Dt_inclusao = GETDATE(),
                Dt_alteracao = @Dt_alteracao
            WHERE ID = @ID

Isso deve funcionar e resolver da forma que você quer.

Espero ter ajudado!

Funcionou!

Muito obrigado :)

Mais uma dúvida é obrigatório definir o ID? se não for como faço para que ele faça isso automaticamente, até agora em todos os inserts que fiz fez-se necessário declarar o ID.

Exemplo:

EXEC    @return_value = [dbo].[sp_CRUDLogin]
        @ID = 12, <-- declaração do campo
        @Usuario = N'Riptde',
        @Senha = N'123456',
        @Nome = N'Ronnan',
        @Email = N'ronnan@abc.com.br',
        @Telefone = N'212354632',
        @Dt_inclusao = N'',
        @Dt_alteracao = NULL,
        @StatementType = N'Insert'

SELECT    'Return Value' = @return_value

Olá Fernando,

Para omitir o ID, a coluna pode ser criada com a propriedade "identity", o que faria dela uma coluna sequencial.