Sidebar

Existen 4 maneras de ejecutar sentencias SQL dentro de SQL Server, en este articulo revisamos cada una de ella y las diferencias entre ellas.

Metodos para ejecutar sentencias SQL
Existen 4 maneras de ejecutar sentencias SQL:

    • Dinámicos
    • Batch
    • Transacción
    • Scripts


Sentencias Dinámicas
Las sentencias dinámicas se refieren a aquellas sentencias que son generadas durante la ejecución de un script. Por ejemplo se puede generar un store procedure con variables para construir una sentencia SELECT que incorpore esas variables.
Las sentencias dinámicas siempre van acompañadas de la palabra EXECUTE (Transact-SQL) con strings y variables. SQL Server determina el valor de las variables conforme se va ejecutando el script.

Por ejemplo

DECLARE @tabla varchar(20), @bd varchar(20)
SET @tabla = 'authors'
SET @bd = 'pubs'
EXECUTE ('USE '+ @bd + 'SELECT * FROM ' + @tabla )

Se debe de tomar en cuenta al construir sentencias SQL Dinámicas lo siguiente:

  • Las variables utilizadas deben de ser de tipo carácter, si se quieren usar valores numéricos primero deben de convertirse a carácter.
  • Se pueden iterar múltiples sentencias dinámicas
  • No se pueden usar funciones dentro de sentencias dinámicas

Batches

Un Batch de SQL es simplemente la ejecución de varias sentencias juntas. Cada vez que ejecutamos una sentencia de SQL individualmente, el servidor presenta cierto overhead para su procesamiento, en cambio si ejecutamos varias sentencias de SQL juntas dentro de un batch recibe un solo overhead para todas las sentencias ejecutadas dentro del batch. Los batches mejoran el performance de SQL Server debido a que compila y ejecuta todo junto. Si durante la ejecución del batch SQL Server detecta un error de sintaxis, no se procesa ninguna sentencia dentro del batch.

Los batch se definen utilizando el comando GO, este comando no es una sentencia de SQL es solo una forma de identificar el final de un batch a través de las utilerías de SQL Server. SQL Server trata a todas las sentencias que están antes de un GO como un solo batch.

Ejemplo:

USE pubs
SELECT MAX(price) AS 'Máximo precio'
FROM titles
PRINT ' '
SELECT MIN(price) AS 'Menor precio'
FROM titles
PRINT ' '
SELECT AVG(price) AS 'Precio promedio'
FROM titles
GO

Se debe de tomar en cuenta lo siguiente cuando se desea definir un batch:
No se puedes combinar las siguientes sentencias en un solo batch
CREATE PROCEURE
CREATE VIEW
CREATE TRIGGER
CREATE RULE
CREATE DEFAULT
Si se quiere crear una base de datos, una tabla y un trigger se deberá realizar de la siguiente manera

CREATE DATABASE Nombre_bd

CREATE TABLE nombre_tabla (column list)

GO CREATE TRIGGER Nombre_trigger

GO

Si se declaran variables locales, estas variables solo van a estar disponibles en el batch. Si se referencia a una variable local después de un GO, se obtendrá un mensaje de error.
Antes de store procedure debe ir siempre la palabra EXECUTE o EXEC, a menos de que el store procedure sea utilizado en la primera línea del batch.
Por ejemplo
SELECT * FROM pubs..practice
EXECUTE sp_help 'practice'
GO

 

Transacciones

SQL Server procesa las transacciones como un batch, es decir SQL Server trata a una transacción como una sola unidad, pero la diferencia entre un batch y una transacción, es que una transacción te permite deshacer las operaciones que se realizaron dentro de una transacción, cosa que no es posible en un batch. La transacción te permite mantener la integridad referencial en una base de datos, ya que o se ejecuta satisfactoriamente toda la transacción o falla toda la transacción completa. Dentro de una sola transacción es posible definir varios batch.
Para poder marcar el inicio de una transacción las sentencias debe de preceder por la palabra BEGIN TRANSACTION y finalizar con COMMIT TRANSACTION o ROLLBACK TRANSACTION. Si utiliza ROLLBACK TRANSACCTION SQL Server deshará la transacción.
La sintaxis es la siguiente:
BEGIN TRANSACTION

SQL statement #1

SQL statement #2
...
COMMIT TRANSACTION

Debes de usar siempre una transacción cuando queremos estar seguros de que todas las sentencias se apliquen correctamente, si alguna de ellas falla ninguna de ellas es aplicada.

Scripts
Un script es simplemente un archivo e texto que contienen una serie de comandos SQL. Este archivo se puede abrir con las utilerías de SQL Server y ejecutarlo como en el caso de osql.
Estos scripts pueden ser creados desde cualquier editor de texto y es recomendable guardarlo con la extensión .sql para poder distinguirlo de los demás.
Cuando generes tus scripts es recomendable comentarlos. SQL Server soporta dos tipos de comentarios, por linea y por bloque.

Tips BD