Buenas practicas en construccion de stored procedures
INCLUIR LA DECLARACIÓN SET NOCOUNT ON : Con cada instrucción SELECT y DML, el servidor SQL
devuelve un mensaje que indica el número de filas afectadas por esa declaración. Esta información es útil sobre todo en la depuración del código, pero es inútil después de eso. Al establecer SET NOCOUNT ON, podemos desactivar la función de devoluciónde esta información adicional. Para los procedimientos almacenados que contengan varias declaraciones o contener bucles de Transact-SQL, el establecimiento de SET NOCOUNT en ON puede proporcionar un aumento de rendimiento importante porque el tráfico de red se reduce considerablemente. CREATE PROC dbo.ProcName AS SET NOCOUNT ON; --Procedure code here SELECT column1 FROM dbo.TblTable1 -- Reset SETNOCOUNT to OFF SET NOCOUNT OFF; GO
USE EL NOMBRE DE ESQUEMA CON EL NOMBRE DEL OBJETO: El nombre del objeto está calificado
si se utiliza con el nombre de esquema. El nombre de esquema se debe utilizar con el nombre del procedimiento almacenado y con todos los objetos de referencia dentro del procedimiento almacenado. Esta ayuda directamente a encontrar el plan compilado en lugar de buscar losobjetos de otros esquemas posibles antes de decidirse a utilizar un plan en caché, si está disponible. Este proceso de búsqueda y decidir un esquema de un objeto lleva a un bloqueo de compilación en el procedimiento almacenado y disminuye el rendimiento del procedimiento almacenado. Por lo tanto, siempre se refieren los objetos con nombre completo en el procedimiento almacenado:
SELECT * FROMdbo.MyTable -- Preferred method -- Instead of SELECT * FROM MyTable -- Avoid this method --And finally call the stored procedure with qualified name like: EXEC dbo.MyProc -- Preferred method --Instead of EXEC MyProc -- Avoid this method
NO UTILICE EL PREFIJO "SP_" EN EL NOMBRE DEL PROCEDIMIENTO ALMACENADO: Si un
nombre de procedimiento almacenado comienza con "sp_", a continuación, SQL Serverbusca primero en la base de datos master y luego en la base de datos actual en donde están las sesiones con las que estamos trabajando. Búscar en la base de datos master causas sobrecarga adicional e incluso un mal resultado si otro procedimiento almacenado con el mismo nombre se encuentra en la base de datos master.
USE IF EXISTS (SELECT 1) EN LUGAR DE (SELECT *): Para comprobar la existenciade un registro de
otra tabla, se utiliza la cláusula IF EXISTS. El SI devuelve cláusula EXISTS verdadera si el valor devuelto por una instrucción interna, ya sea un único valor "1 "o todas las columnas de un registro o registros completos. La salida de la declaración de la residencia no se utiliza. Por lo tanto, para reducir al mínimo los datos para el procesamiento y la transferencia de la red,debemos utilizar "1" en la cláusula SELECT de una instrucción interna, como se muestra a continuación: IF EXISTS (SELECT 1 FROM sysobjects
WHERE name = 'MyTable' AND type = 'U')
UTILICE EL PROCEDIMIENTO ALMACENADO SP_EXECUTESQL EN LUGAR DE LA INSTRUCCIÓN EXECUTE.
El procedimiento almacenado sp_executesql admite parámetros. Así, mediante el procedimiento almacenado sp_executesql en lugar dela instrucción EXECUTE mejorar la aptitud para la reutilización del código. El plan de ejecución de una sentencia dinámica se pueden reutilizar sólo si todas y todos los personajes, incluido el caso, el espacio, los comentarios y los parámetros, es el mismo para dos estados. Por ejemplo, si ejecutamos el siguiente lote: DECLARE @Query VARCHAR(100) DECLARE @Age INT SET @Age = 25 SET @Query ='SELECT * FROM dbo.tblPerson WHERE Age = ' + CONVERT(VARCHAR(3),@Age) EXEC (@Query) Si volvemos a ejecutar el lote anterior con valor diferente Edad @, entonces el plan de ejecución de sentencia SELECT creado para @ Edad = 25 no se pueden reutilizar. Sin embargo, si escribimos el lote de arriba se indican a continuación: DECLARE @Query NVARCHAR(100) SET @Query = N'SELECT * FROM dbo.tblPerson WHERE Age...
Regístrate para leer el documento completo.