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.
You are not authorised to post comments.

Comments powered by CComment

DBASupport - Foro

Mirroring con estados disconnected
Hola, el día de hoy después de reiniciar mi servidor de destino a donde realizo el mirroring ya no pude replicar más, el error que muestra es que...

Se me duplica el mensaje en /etc/motd
  • Topic started by agamez
  • in General
  • 3 years ago.
  • 3 years ago.
  • 2 replies
Buen día, alguien tiene idea porque después de actualizar a fedora 28 se me esta duplicando la salida de mi /etc/motd?

Cómo puedo filtrar un mensaje en el log messages
Buenos días, estoy recibiendo en mi log de errores muchos mensajes de cron, ya que tengo varios crones configurados en mi server. Existe alguna...

Cómo validar la hora de ejecución de un proceso
Hola, estoy tratando de validar que un proceso sólo pueda ser ejecutado dentro de un periodo de tiempo, en este caso entre las 7:00 AM y las 7:00...

Estadisticas en la base de datos
Buenos días, estoy teniendo problemas de performance en mis queries y quisiera saber como puedo validar que mis tablas tienen las estadisticas...
URGE AYUDA
  • Topic started by
  • in General
  • 15 years ago.
  • 15 years ago.
  • 30 replies
HOLA ESPERO ME PUEDAN AYUDAR. TEN GO UNA TABLA CON una estructura similar a la siguiente: id_mov cargo subtotal total...

Duada de Memoria de SQL Server 2005
  • Topic started by Erzengel
  • in General
  • 11 years ago.
  • 11 years ago.
  • 30 replies
Buen Día Recurro nuevamente a su sabiduría. Quiero saber el porque tiene un tope SQL Serever de 2GB en Windows server 2003 de 32 bit y si alguien...

SqlDateTime overflow
  • Topic started by
  • in General
  • 15 years ago.
  • 15 years ago.
  • 11 replies
Alguno de ustedes ha tenido este problema: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.' Les...

problemas para iniciar el agente sql
  • Topic started by acgch
  • in General
  • 14 years ago.
  • 14 years ago.
  • 11 replies
Recientemente para asegurar el sql server 2005, cree una cuenta sql con derechos de sysadmin y borre el grupo BUILTIN\Administradores para evitar...

Problemas para levantar mirror
  • Topic started by acgch
  • in General
  • 14 years ago.
  • 14 years ago.
  • 16 replies
Hola amigos, tengan un buen día, les comento que estoy configurando mirror siguiendo los pasos a través del wizard del managment studio y también...
Mirroring con estados disconnected
Hola, el día de hoy después de reiniciar mi servidor de destino a donde realizo el mirroring ya no pude replicar más, el error que muestra es que...

Se me duplica el mensaje en /etc/motd
  • Topic started by agamez
  • in General
  • 3 years ago.
  • 3 years ago.
  • 2 replies
Buen día, alguien tiene idea porque después de actualizar a fedora 28 se me esta duplicando la salida de mi /etc/motd?

Cómo puedo filtrar un mensaje en el log messages
Buenos días, estoy recibiendo en mi log de errores muchos mensajes de cron, ya que tengo varios crones configurados en mi server. Existe alguna...

Cómo validar la hora de ejecución de un proceso
Hola, estoy tratando de validar que un proceso sólo pueda ser ejecutado dentro de un periodo de tiempo, en este caso entre las 7:00 AM y las 7:00...

Estadisticas en la base de datos
Buenos días, estoy teniendo problemas de performance en mis queries y quisiera saber como puedo validar que mis tablas tienen las estadisticas...
Deshabilitar todos los jobs
  • Topic started by agamez
  • in Jobs
  • 3 years ago.
  • 3 years ago.
  • 1 reply
Buenos días, alguien sabe como puedo deshabilitar rapidamente todos los jobs de SQL Server, gracias.

Mirroring con estados disconnected
Hola, el día de hoy después de reiniciar mi servidor de destino a donde realizo el mirroring ya no pude replicar más, el error que muestra es que...

Se me duplica el mensaje en /etc/motd
  • Topic started by agamez
  • in General
  • 3 years ago.
  • 3 years ago.
  • 2 replies
Buen día, alguien tiene idea porque después de actualizar a fedora 28 se me esta duplicando la salida de mi /etc/motd?

Cómo puedo filtrar un mensaje en el log messages
Buenos días, estoy recibiendo en mi log de errores muchos mensajes de cron, ya que tengo varios crones configurados en mi server. Existe alguna...

Cómo validar la hora de ejecución de un proceso
Hola, estoy tratando de validar que un proceso sólo pueda ser ejecutado dentro de un periodo de tiempo, en este caso entre las 7:00 AM y las 7:00...