SQL dinámico en Transact SQL
Transact SQL permite dos formas de ejecutar SQL dinamico(construir sentencias SQL dinamicamente para ejecutarlas en la base de datos):-
La instrucción EXECUTE - o simplemente EXEC
-
El procedimiento almacenado sp_executesql
Desde aquí recomendamos la utilización de sp_executesql si bien vamos a mostrar la forma de trabajar con ambos métodos.
La instrucción EXECUTE
La instrucción EXECUTE - o simplemente EXEC
- permite ejecutar una cadena de caracteres que representa una sentencia
SQL. La cadena de caracteres debe ser de tipo nvarchar .
El siguiente ejemplo muestra como ejecutar una cadena de caracteres con la instrucción EXEC.
DECLARE @sql nvarchar(1000) |
DECLARE @sql nvarchar(1000) |
Además el uso de la instrucción EXEC es menos eficiente, en terminos de rendimiento, que sp_executesql.
Para solventar el problema debemos trabajar siempre con sq_executesql, que permite el uso de parametros y con el que obtendremos un mejor rendimiento de nuestras consultas.
El procedimiento almacenado sp_executesql
Para ejecutar sql dinamico, se recomienda utilizar el procedimiento almacenado sp_executesql, en lugar de una instrucción EXECUTE.
-
sp_executesql admite la sustitución de parámetros
-
sp_executesql es más seguro y versátil que EXECUTE
-
sp_executesql genera planes de ejecución con más probabilidades de que SQL Server los vuelva a utilizar, es más eficaz que EXECUTE.
El siguiente ejemplo muestra el uso (muy simple) de sp_executesql.
DECLARE @sql nvarchar(1000) |
El siguiente ejemplo muestra el uso de sp_executesql con parámetros:
DECLARE @sql nvarchar(1000),
@paramDefinition nvarchar(255),
@paramValue char(3)
SET @paramDefinition = '@codPais char(3)'
SET @paramValue = 'ESP'
SET @sql = 'SELECT
COD_PAIS,
NOMBRE_PAIS,
ACTIVO,
FX_ALTA
FROM
PAISES
WHERE COD_PAIS = @codPais'
EXEC sp_executesql @sql, @paramDefinition, @paramValue
No hay comentarios.:
Publicar un comentario