none
No existe Tabla pero se puede crear un procedimiento almacenado SQL SERVER 2017 ENTERPRISE RRS feed

  • Pregunta

  • Hola amigos tengo el siguiente inconveniente estoy creando un procedimiento almacenado y dentro de la misma hace referencia a una tabla que no existe y cuando lo ejecuto se almacena correctamente sin realizar un previo aviso de que no existe la tabla en la base de datos saben por que puede ser posible tal situación

    CREATE PROCEDURE [GEN].[SP_INSERCION_A_XXX] @A INT, 
                                               @B INT, 
                                               @C INT
    AS
        BEGIN
            IF(@O_EXITO = 1
               OR @O_EXITO IS NULL)
                BEGIN
                    DECLARE @V_FECHA_ADICION DATETIME2= GETDATE();
                    INSERT INTO GEN.T_EJEMPLO
                    (A, 
                     B, 
                     C
                    )
                    VALUES
                    (@A, 
                     @B, 
                     @C
                    );
            END;
        END;

    CABE MENCIONAR QUE LA TABLA  GEN.T_EJEMPLO NO EXISTE

    deberia lanzar un mensaje de que no existe dicha tabla

    Saludos

    jueves, 12 de marzo de 2020 13:15

Todas las respuestas

  • Hola 

     

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te recomiendo probar el siguiente código.

    IF EXISTS (SELECT * FROM sysobjects WHERE type = 'U' AND name = 'Nombre de tu tabla')
    BEGIN
    PRINT 'Existe'
    
    END;
    ELSE
    BEGIN
    PRINT 'no existe'
    END;


    Otra opción podría ser la siguiente la cual es una practica más sana y corta debido a que no haces queries directos a las tablas de sistema.

    IF OBJECT_ID('dbo.mitabla') IS NULL
    
    BEGIN
    
    --no existe
    
    END;
    
    ELSE
    
    BEGIN
    
    --existe
    
    END;


    Gracias por usar los foros de MSDN.

     

    Jordy Quiros

     ____

     

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

     

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

     

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.


    jueves, 12 de marzo de 2020 16:51
    Moderador
  • Estimado Jordy Quiros Salas como mencione estoy creando un procedimiento almacenado en el cual utilizo una tabla pero paso el tiempo lo elimine ahora que necesito realizar un Alter no genera un error que me diga "no existe la tabla" al contrario se ejecuta de  modo normal como es posible tal situación. que genere un error que te alerte que no existe la tabla.
    jueves, 12 de marzo de 2020 18:14
  • Hola

    El codigo que te dio Jordy Quiros, es precismente para evitar este tipo de errores, sin no existe tu tabla, porque fue eliminada o algo por el estilo, esa rutina la incluyes en tu procedimento y te avisara que la tabla que quieres procesar no existe.


    IIslas Master Consultant SQL Server

    jueves, 12 de marzo de 2020 22:03
  • Hola Diego JQS:

    Precisamente esa es una virtud de los procedimientos almacenados, donde puedes ir generando dinámicamente modificaciones a la estructura de los objetos y el procedimiento las va ejecutando secuencialmente sin generar errores.

    Un ejemplo que ocurre muy a menudo, son las importaciones, desde archivos.

    Conforme recibes el archivo, en un procedure, se generan o modifican la estructura de tablas en función de la información recibida. Esto solo se puede hacer en un procedure. El motor me garantiza que cuando creo el procedure el código era correcto. Y en el momento de ejecución este va ejecutando linea por linea y si todo esta ok, bien y sino genera el correspondiente error.

    viernes, 13 de marzo de 2020 4:56