 |
|
 |
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):
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
|
|
| Añadir comentario ... |
Para preguntar utiliza los foros
|
|

|
SQL dinámico en Transact SQL |
|
Autor:
Pedro Herrarte Sánchez
|
|
Visitas:
5704 |
Fecha de publicación:
12/01/2008 |
Pedro Herrarte, es consultor independiente, ofreciendo sercivios 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, bases de datos (SQL Server y ORACLE) e integración de sistemas.
Es experto en desarrollo (C#, ASP.NET, 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).
Es fundador, diseñador y programador de www.devjoker.com. |
|
Visitas:
39
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
131
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
161
|
Comentarios:
1
|
Archivo:
Articulos
|
Visitas:
154
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
123
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
210
|
Comentarios:
0
|
Archivo:
Articulos
|
Visitas:
278
|
Comentarios:
5
|
Archivo:
Articulos
|
Visitas:
4990
|
Comentarios:
4
|
Archivo:
Articulos
|
Visitas:
603
|
Comentarios:
1
|
Archivo:
Articulos
|
Visitas:
1402
|
Comentarios:
1
|
Archivo:
Articulos
|
|
|
|
 |
| Encuesta |
|
Si trabajas con .NET ¿Que entorno utilizas? |
|
|
|
|
|
|
|
|
 |