En una base de datos de producción, normalmente tendremos muchos procedimientos almacenados, y hay ocasiones en las que necesitamos saber exactamente qué es lo que hacen, por lo que hay que acceder a su código. Tal vez tengamos un repositorio con los scripts y podremos acceder a él, pero tal vez no nos fiemos de que esté actualizado, o bien queramos directamente ver qué es lo que se está ejecutando en producción. Es entonces cuando nos vamos a SSMS y desplegamos la lista de los procedimientos, empezamos a desplazarnos y finalmente encontramos el que buscamos… botón derecho sobre él, seleccionamos la opción “Modify” y automáticamente nos aparecerá en una nueva conexión el código.

Esta operación se puede llegar a repetir muchas veces y finalmente termina siendo bastante tediosa. Sin embargo, SQL Server nos provee (desde su versión 2005) la función OBJECT_DEFINITION a la que, pasándole el id del objeto podremos ver su código. Este objeto puede ser una restricción CHECK o DEFAULT, un procedimiento almacenado, una función (cualquiera de los tipos existentes), una regla, un desencadenador o una vista.

Es decir, ahora podremos agilizar la operación descrita en el primer párrafo simplemente ejecutando la instrucción SELECT OBJECT_DEFINITION(OBJECT_ID(‘dbo.uspGetManagerEmployees’)) para ver el código del procedimiento almacenado pasado como parámetro de la base de datos AdventureWorks.

Es un avance, pero hay ciertas pegas: tenemos que situarnos en la base de datos que contiene el objeto, tenemos que seguir escribiendo “bastante”, tenemos que mostrar la salida como texto (CTRL+T), tenemos que haber configurado la salida a lo máximo permitido (menú Tools -> Options -> Query Results -> SQL Server -> Results to Text y rellenar el valor de la caja de texto Maximum number of characters displayed in each column)… en fin, que tampoco es la panacea.

Sin embargo, avanzaríamos mucho si fuera posible escribir tan sólo el nombre del procedimiento y que con una combinación de teclado nos mostrara el código automáticamente, ¿verdad?. Como habréis adivinado, este artículo muestra cómo hacerlo. Para ello simplemente seguir estos pasos:

  1. Ejecutar el script siguiente:

    USE MASTER

    GO

    IF EXISTS(SELECT 1 FROM sys.procedures WHERE name LIKE ‘sp_object_definition’)

        DROP PROC dbo.sp_object_definition

    GO

    CREATE PROC dbo.sp_object_definition @object SYSNAME, @dbName SYSNAME = NULL AS

    IF @dbName IS NULL

        SET @dbName = db_name()

    DECLARE @r VARCHAR(MAX)

    DECLARE @sSql NVARCHAR(4000)

    DECLARE @p nvarchar(500)

    SET @p = N‘@r varchar(MAX) OUTPUT’

    SET @sSql = ‘USE ‘ + @dbName

    SET @sSql = @sSql + ‘ select @r = object_definition(object_id(”’ + @object + ”’))’

    EXEC sp_executesql

    @sSql,

    @p,

    @r= @r OUTPUT

    IF @r IS NULL

        RAISERROR(‘El objecto no existe en la base de datos’, 16, 1)

    ELSE

        PRINT @r

    GO

    EXEC sp_MS_marksystemobject sp_object_definition

    GO

  2. En la opción de menú Tools -> Options -> Environment -> Keyboard, seleccionar por ejemplo la combinación CTRL + 3 y escribir sp_object_definition
  3. Cerrar y volver a ejecutar SSMS
  4. Abrir una nueva conexión, da igual en qué base de datos estéis situados, y escribir uspGetManagerEmployees, AdventureWorks
  5. Seleccionar el texto y pulsar la combinación de teclas seleccionada en el paso 2

     

Como podréis comprobar, tenemos a tiro de dos teclas el código del objeto indicado, sin mucho trabajo… Bueno, hay que seguir tecleando el nombre del objeto, pero creo que eso es imprescindible J

 

Por cierto, si la base de datos actual es la que contiene el objeto, no es necesario escribir su nombre. Es decir, si seleccionáis el texto uspGetManagerEmployees en AdventureWorks, veréis que también funciona.

 

0 Shares:
Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

You May Also Like
In-Memory OLTP: Otra historia de corrupción y problemas de DMVs
Leer más

In-Memory OLTP: Otra historia de corrupción y problemas de DMVs

El uso de la funcionalidad In-Memory OLTP sigue siendo una rareza en general entre nuestros clientes y se desconoce el alto potencial para poder mejorar el rendimiento de los sistemas con alto nivel de concurrencia y transacciones. Nuestro experto Rubén Garrigós nos explica cómo habilitar dicha funcionalidad, qué problemas pueden ocurrir y cómo solucionarlos.