none
Borrar tabla con procedimiento almacenado

    Question

  • Hola a todos,

       esto es sencillo pero no me doy cuenta qué estoy haciendo mal. Tengo un procedimiento almacenado que recibe como parámetro el nombre de una base de datos y necesito borrar una tabla.

       Básicamente es algo como esto:

    CREATE PROCEDURE [dbo].[UpdateFoodsam]
        -- Add the parameters for the stored procedure here
        @pDatabase varchar(50)
    AS
    BEGIN
        -- SET NOCOUNT ON added to prevent extra result sets from
        -- interfering with SELECT statements.
        SET NOCOUNT ON;
        PRINT @pDatabase
        DELETE [@pDatabase]..MD_FOODSAM_QTI
        -- Insert statements for procedure here
    END

       Lo llamo con

    EXEC UpdateFoodsam 'MD_FOODSAM_TEST_2'

       El print lo devuelve correcto pero luego da un error:

    Invalid object name '@pDatabase..MD_FOODSAM_QTI'.

       Cómo debo poner el parámetro recibido para que me lo tome?

       Muchas gracias desde ya.

     

    Mauricio

    Tuesday, October 19, 2010 10:48 AM

Answers

  • Hola,

    El parametro lo estas pasando bien, lo que esta mal es intentar utilizar el comando DELETE con una variable. Para realizar este tipo de operaciones necesitamos pasar el nombre exacto. De modo que una posible solución a tu problema es generar la cadena de caracteres "DELETE MD_FOODSAM_TEST_2..MD_FOODSAM_QTI. Para ello habría que modificar el procedimiento como sigue:

    CREATE
     PROCEDURE
     [dbo].[UpdateFoodsam] 
      @pDatabase varchar(50)
    AS
    BEGIN
      SET NOCOUNT ON;
     PRINT @pDatabase
     exec('DELETE ['+@pDatabase+']..MD_FOODSAM_QTI')
    END
    
    
    
    Tuesday, October 19, 2010 12:23 PM

All replies

  • Hola,

    El parametro lo estas pasando bien, lo que esta mal es intentar utilizar el comando DELETE con una variable. Para realizar este tipo de operaciones necesitamos pasar el nombre exacto. De modo que una posible solución a tu problema es generar la cadena de caracteres "DELETE MD_FOODSAM_TEST_2..MD_FOODSAM_QTI. Para ello habría que modificar el procedimiento como sigue:

    CREATE
     PROCEDURE
     [dbo].[UpdateFoodsam] 
      @pDatabase varchar(50)
    AS
    BEGIN
      SET NOCOUNT ON;
     PRINT @pDatabase
     exec('DELETE ['+@pDatabase+']..MD_FOODSAM_QTI')
    END
    
    
    
    Tuesday, October 19, 2010 12:23 PM
  • Perfecto, funcionó muy bien, gracias Enrique!

     

    Tuesday, October 19, 2010 12:32 PM