+505 27133089 | contacto@ing-sistemas.com
    Twitter
  • Facebook
  • Instagram

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

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(2000)

SET @sql = 'SELECT Nombre,Diereccion,Telefono,Estado FROM Persona'

EXEC (@sql)

 

El principal incoveniente de trabajar con la instrucción EXEC es que no permite el uso de parametros abriendo la puerta a potenciales ataques de Sql Injections. Además el uso de la instrucción EXEC es menos eficiente, en terminos de rendimiento, que sp_executesql.

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(2000)

SET @sql = 'SELECT Nombre,Diereccion,Telefono,Estado FROM Persona'

EXEC sp_executesql @sql

sp_executesql admite la sustitución de valores de parámetros para cualquier parámetro especificado en la cadena Transact-SQL a ejecutar.

El siguiente ejemplo muestra el uso de sp_executesql con parámetros:

DECLARE @sql nvarchar(2000),	@paramDefinition nvarchar(255),@paramValue char(3) 

SET @paramDefinition = '@Codigo char(3)' 

SET @paramValue = 'P001'

SET @sql = 'SELECT Codigo,Nombre,Dirccion,Telefono,Estado FROM Persona WHERE Codigo= @Codigo' 

EXEC sp_executesql @sql, @paramDefinition, @paramValue

Deja un comentario

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