Monday, December 21, 2015

Mejoras de T-SQL en SQL Server 2016 - DROP IF EXISTS

Mirando algunas de las mejoras introducidas con SQL Server 2016 encontré una que es realmente muy interesante y útil. Se ha introducido en T-SQL un constructor que se ha estado solicitando hace mucho tiempo.

Generalmente cuando empezamos con un script, particularmente cuando queremos hacer una demo, lo que hacemos es chequear si los objectos existen para luego borrarlos y finalmente crearlos nuevamente

-- Casos tipicos
IF OBJECT_ID('[dbo].[MiTabla]', 'U') IS NOT NULL
       DROP TABLE [dbo].[MiTabla];
-- Otra opción
IF EXISTS (SELECT * FROM sys.procedures WHERE name = 'SP_DBA_MyStoreProc')

       DROP PROCEDURE SP_DBA_MyStoreProc

Ahora con SQL Server 2016 podemos hacer lo siguiente

DROP TABLE IF EXISTS [dbo].[MiTabla];
DROP PROCEDURE IF EXISTS [SP_DBA_MyStoreProc];

La parte interesante es que si el objecto no existe no mostrará ningún mensaje de error

Seguramente lo van a empezar a utilizar a la brevedad porque es un constructor muy útil

El mismo constructor esta disponible para otros objectos

  • AGGREGATE
  • PROCEDURE
  • TABLE
  • ASSEMBLY
  • ROLE
  • TRIGGER
  • VIEW
  • RULE
  • DATABASE
  • SCHEMA_USER
  • DEFAULT
  • SECURITY POLICY
  • FUNCTION
  • SEQUENCE
  • INDEX
  • TYPE
  • SYNONYM

También se puede utilizar para columnas y/o contraints

ALTER TABLE [dbo].[MiTabla] DROP CONSTRAINT IF EXISTS MT_column_pk;
ALTER TABLE [dbo].[MiTabla] DROP COLUMN IF EXISTS ID;


No comments:

Post a Comment