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)

 

SET @sql = 'SELECT

COD_PAIS,

NOMBRE_PAIS,

ACTIVO,

FX_ALTA

FROM

PAISES'

EXEC (@sql)

    También con SQL dinamico podemos ejecutar sentencias de tipo DDL (Data Definition Languaje), como CREATE TABLE.

 

DECLARE @sql nvarchar(1000)

SET @sql='CREATE TABLE TEMPORAL

( ID int IDENTITY, DATO varchar(100))'

EXEC (@sql)

 

SET @sql = 'SELECT * FROM TEMPORAL'

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 - http://www.devjoker.com/contenidos/Articulos/45/Seguridad-en-Internet--SQL-Injections.aspx

    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)

 

SET @sql = 'SELECT

COD_PAIS,

NOMBRE_PAIS,

ACTIVO,

FX_ALTA

FROM

PAISES'

 

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

 

Pedro  Herrarte  Sánchez
SQL dinámico en Transact SQL
Pedro Herrarte Sánchez

Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación. Posee mas de diez años de experiencia trabajando para las principales empresas de España. Es especialista en tecnologías .NET, entornos Web (ASP.NET, ASP.NET MVC,jQuery, HTML5), bases de datos (SQL Server y ORACLE) e integración de sistemas. Es experto en desarrollo (C#, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE). Pedro es MCP y MAP 2012, es fundador, diseñador y programador de www.devjoker.com..
Fecha de alta:12/01/2008
Última actualizacion:12/01/2008
Visitas totales:140802
Valorar el contenido:
Últimas consultas realizadas en los foros
Últimas preguntas sin contestar en los foros de devjoker.com