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:
-
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
- En la opción de menú Tools -> Options -> Environment -> Keyboard, seleccionar por ejemplo la combinación CTRL + 3 y escribir sp_object_definition
- Cerrar y volver a ejecutar SSMS
- Abrir una nueva conexión, da igual en qué base de datos estéis situados, y escribir uspGetManagerEmployees, AdventureWorks
-
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.