DROP IF EXISTS - new thing in SQL Server 2016

Published 03-23-2019 02:04 PM 36.6K Views
Microsoft
First published on MSDN on Nov 03, 2015

In SQL Server 2016 CTP3 objects can DIE (DROP IF EXISTS)


Do you like to write following conditional DROP statements:


IF OBJECT_ID('dbo.Product, 'U') IS NOT NULL
DROP TABLE dbo.Product;

IF EXISTS (SELECT * FROM sys.triggers WHERE name = 'trProductInsert')
DROP TRIGGER trProductInsert

I don't like these, and if you also don't like them, then you might try new DROP IF EXISTS (a.k.a. DIE :) ) statements in SQL Server 2016.


From SQL Server 2016 CTP3 you can use new DIE  statements instead of big IF wrappers, e.g.:


DROP TABLE IF EXISTS dbo.Product

DROP TRIGGER IF EXISTS trProductInsert

If the object does not exists, DIE will not fail and execution will continue. Currently, the following objects can DIE:



AGGREGATE



PROCEDURE



TABLE



ASSEMBLY



ROLE



TRIGGER



VIEW



RULE



TYPE



DATABASE



SCHEMA



USER



DEFAULT



SECURITY POLICY



VIEW



FUNCTION



SEQUENCE



INDEX



SYNONYM



DIE is added on columns and constraints in ALTER TABLE statement



  • ALTER TABLE DROP COLUMN IF EXISTS

  • ALTER TABLE DROP CONSTRAINT IF EXISTS


Documentation is already published on MSDN:


DROP TABLE (Transact-SQL) , DROP PROCEDURE (Transact-SQL) , DROP TRIGGER (Transact-SQL) , ALTER TABLE (Transact-SQL) , etc.


%3CLINGO-SUB%20id%3D%22lingo-sub-384562%22%20slang%3D%22en-US%22%3EDROP%20IF%20EXISTS%20-%20new%20thing%20in%20SQL%20Server%202016%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-384562%22%20slang%3D%22en-US%22%3E%0A%20%26lt%3Bmeta%20http-equiv%3D%22Content-Type%22%20content%3D%22text%2Fhtml%3B%20charset%3DUTF-8%22%20%2F%26gt%3B%3CSTRONG%3E%20First%20published%20on%20MSDN%20on%20Nov%2003%2C%202015%20%3C%2FSTRONG%3E%20%3CBR%20%2F%3E%3CH2%20id%3D%22toc-hId-1680722626%22%20id%3D%22toc-hId-1680722626%22%3EIn%20SQL%20Server%202016%20CTP3%20objects%20can%20DIE%20(DROP%20IF%20EXISTS)%3C%2FH2%3E%3CBR%20%2F%3E%3CP%3EDo%20you%20like%20to%20write%20following%20conditional%20DROP%20statements%3A%3C%2FP%3E%3CBR%20%2F%3E%3CCODE%3E%0A%20%20%20IF%20OBJECT_ID('dbo.Product%2C%20'U')%20IS%20NOT%20NULL%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%20DROP%20TABLE%20dbo.Product%3B%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%20IF%20EXISTS%20(SELECT%20*%20FROM%20sys.triggers%20WHERE%20name%20%3D%20'trProductInsert')%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%20DROP%20TRIGGER%20trProductInsert%0A%20%20%3C%2FCODE%3E%0A%20%20%3CBR%20%2F%3E%0A%20%20%3CP%3E%0A%20%20%20I%20don't%20like%20these%2C%20and%20if%20you%20also%20don't%20like%20them%2C%20then%20you%20might%20try%20new%20DROP%20IF%20EXISTS%20(a.k.a.%20DIE%20%3A)%3C%2Fimg%3E%20)%20statements%20in%20SQL%20Server%202016.%0A%20%20%3C%2FP%3E%0A%20%20%3CBR%20%2F%3E%0A%20%20%3CP%3E%0A%20%20%20From%20SQL%20Server%202016%20CTP3%20you%20can%20use%20new%20DIE%20%26nbsp%3Bstatements%20instead%20of%20big%20IF%20wrappers%2C%20e.g.%3A%0A%20%20%3C%2FP%3E%0A%20%20%3CBR%20%2F%3E%0A%20%20%3CCODE%3E%0A%20%20%20DROP%20TABLE%20IF%20EXISTS%20dbo.Product%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%20DROP%20TRIGGER%20IF%20EXISTS%20trProductInsert%0A%20%20%3C%2FCODE%3E%0A%20%20%3CBR%20%2F%3E%0A%20%20%3CP%3E%0A%20%20%20If%20the%20object%20does%20not%20exists%2C%20DIE%20will%20not%20fail%20and%20execution%20will%20continue.%20Currently%2C%20the%20following%20objects%20can%20DIE%3A%0A%20%20%3C%2FP%3E%0A%20%20%3CBR%20%2F%3E%0A%20%20%3CTABLE%3E%0A%20%20%20%3CTBODY%3E%3CTR%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20AGGREGATE%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20PROCEDURE%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20TABLE%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%3C%2FTR%3E%0A%20%20%20%3CTR%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20ASSEMBLY%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20ROLE%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20TRIGGER%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%3C%2FTR%3E%0A%20%20%20%3CTR%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20VIEW%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20RULE%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20TYPE%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%3C%2FTR%3E%0A%20%20%20%3CTR%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20DATABASE%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20SCHEMA%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20USER%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%3C%2FTR%3E%0A%20%20%20%3CTR%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20DEFAULT%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20SECURITY%20POLICY%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20VIEW%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%3C%2FTR%3E%0A%20%20%20%3CTR%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20FUNCTION%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20SEQUENCE%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%3C%2FTR%3E%0A%20%20%20%3CTR%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20INDEX%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%20%3CP%3E%0A%20%20%20%20%20%20SYNONYM%0A%20%20%20%20%20%3C%2FP%3E%0A%20%20%20%20%20%3CBR%20%2F%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%20%3CTD%3E%0A%20%20%20%20%3C%2FTD%3E%0A%20%20%20%3C%2FTR%3E%0A%20%20%3C%2FTBODY%3E%3C%2FTABLE%3E%0A%20%20%3CBR%20%2F%3E%0A%20%20%3CP%3E%0A%20%20%20DIE%20is%20added%20on%20columns%20and%20constraints%20in%20ALTER%20TABLE%20statement%0A%20%20%3C%2FP%3E%0A%20%20%3CBR%20%2F%3E%0A%20%20%3CUL%3E%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%20%3CLI%3E%0A%20%20%20%20ALTER%20TABLE%20DROP%20COLUMN%26nbsp%3BIF%20EXISTS%0A%20%20%20%3C%2FLI%3E%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%20%3CLI%3E%0A%20%20%20%20ALTER%20TABLE%20DROP%20CONSTRAINT%26nbsp%3BIF%20EXISTS%0A%20%20%20%3C%2FLI%3E%0A%20%20%20%3CBR%20%2F%3E%0A%20%20%3C%2FUL%3E%0A%20%20%3CBR%20%2F%3E%0A%20%20%3CP%3E%0A%20%20%20Documentation%20is%20already%20published%20on%20MSDN%3A%0A%20%20%3C%2FP%3E%0A%20%20%3CBR%20%2F%3E%0A%20%20%3CP%3E%0A%20%20%20%3CA%20href%3D%22https%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fms173790.aspx%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3E%0A%20%20%20%20DROP%20TABLE%20(Transact-SQL)%0A%20%20%20%3C%2FA%3E%0A%20%20%20%2C%0A%20%20%20%3CA%20href%3D%22https%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fms174969.aspx%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3E%0A%20%20%20%20DROP%20PROCEDURE%20(Transact-SQL)%0A%20%20%20%3C%2FA%3E%0A%20%20%20%2C%0A%20%20%20%3CA%20href%3D%22https%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fms173497.aspx%22%20target%3D%22_blank%22%20rel%3D%22noopener%20noreferrer%22%3E%0A%20%20%20%20DROP%20TRIGGER%20(Transact-SQL)%0A%20%20%20%3C%2FA%3E%0A%20%20%20%2C%0A%20%20%20%3CA%20href%3D%22https%3A%2F%2Fwww.google.com%2Furl%3Fsa%3Dt%26amp%3Brct%3Dj%26amp%3Bq%3D%26amp%3Besrc%3Ds%26amp%3Bsource%3Dweb%26amp%3Bcd%3D3%26amp%3Bved%3D0CCoQFjACahUKEwivzorIivTIAhVM2WMKHdt4DN4%26amp%3Burl%3Dhttps%253A%252F%252Fmsdn.microsoft.com%252Fen-us%252Flibrary%252Fms190273.aspx%26amp%3Busg%3DAFQjCNFaCHuLapOuR0q8HqeZnBKxpZXzYA%26amp%3Bsig2%3Dqi59lQ7Ho3vmtdX8psyIwA%26amp%3Bcad%3Drja%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3E%0A%20%20%20%20ALTER%20TABLE%20(Transact-SQL)%0A%20%20%20%3C%2FA%3E%0A%20%20%20%2C%20etc.%0A%20%20%3C%2FP%3E%0A%20%20%3CBR%20%2F%3E%0A%20%20%3CP%3E%0A%20%20%3C%2FP%3E%0A%20%0A%3C%2FLINGO-BODY%3E%3CLINGO-TEASER%20id%3D%22lingo-teaser-384562%22%20slang%3D%22en-US%22%3EFirst%20published%20on%20MSDN%20on%20Nov%2003%2C%202015%20In%20SQL%20Server%202016%20CTP3%20objects%20can%20DIE%20(DROP%20IF%20EXISTS)Do%20you%20like%20to%20write%20following%20conditional%20DROP%20statements%3AIF%20OBJECT_ID('dbo.%3C%2FLINGO-TEASER%3E%3CLINGO-LABS%20id%3D%22lingo-labs-384562%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3ESQLServerStorageEngine%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
Version history
Last update:
‎Mar 23 2019 02:04 PM
Updated by: