خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را
استفاده از DROP و IF EXISTS در SQL Server
چک کردن اشیائی در دیتابیس مانند Table، stored procedure و function و غیره.. و سپس حذف کردن آنها، اقدامی است که شما در خصوص یک دیتابیس م توانید انجام دهید. عمدتا بصورت دستی به یک دیتابیس در SQL Server وارد می شوید و شیء مورد نظرتان را یافته و سپس آن را حذف می کنید. اما از SQL Server 2014 و نسخه های بعد از آن، می توانید آبجکت مورد نظرتان را با استفاده از اسکریپت چک کنید و در صورت وجود داشتن، آن را Drop کنید. شما ممکن است از راه حلهایی مانند استفاده از IF استفاده کرده باشید تا بررسی کنید که آیا شیء در SYS.OBJECTS یا INFORMATION_SCHEMA وجود دارد و سپس از دستور Drop برای حذف آن استفاده کرده اید.
سرانجام مایکروسافت در آیتم اختیاری IF EXISTS را در Drop معرفی کرد. هنگام افزودن IF EXISTS در دستور drop ، فقط در صورت وجود آن شیء در پایگاه داده ، شیء را Drop می کند.
Syntax آن بدین صورت می باشد:
از هم اکنون ، DROP IF EXISTS می تواند برای اشیایی همچون دیتابیس، table, procedure, view, function, index, trigger, default, rule, schema, aggregate, assembly, role, type, user, security policy, sequence and synonym مورد استفاده قرار گیرد. IF EXISTS همچنین می تواند در ALTER TABLE برای Drop کردن ستون یا constraint استفاده شود.
اگر بدون استفاده از IF EXISTS سعی در حذف شیء ای که وجود ندارد کنید، با خطا مواجه می شوید.
وقتی از IF EXISTS در Drop استفاده می کنید، حتی اگر شی موجود نباشد ، موتور SQL Server بدون هر گونه خطا، اجرای مراحل بعدی را ادامه خواهد داد. اگر به مثال زیر توجه کنید با اینکه جدول مورد نظر وجود نداردف خطایی نشان داده نشده و مراحل بعد اجرا می شود.
در ادامه کار مثال هایی از دستور DROP IF EXISTS در SQL Server را مشاهده خواهید کرد.
همانطور که بالاتر گفته شد، اگر IF EXISTS در Drop باشد می توان از آن برای چندین آبجکت استفاده کرد. در این پست مثال هایی از Drop اشیاء مانند database، table، procedure، view، function به همراه Drop کردن ستون و constraint را خواهید دید. پس ابتدای امر دیتابیس و سایر آبجکت ها مورد نیاز در آن را ایجاد می کنیم.
در SQL Server 2014 و نسخ قبل از آن می توانید با استفاده از IF به همین خروجی برسید.
برای رسیدن به خروجی کوئری فوق، در SQL Server 2014 و نسخ قبل از آن، می توانید IF به صورت زیر استفاده کنید.
برای رسیدن به خروجی کوئری فوق، در SQL Server 2014 و نسخ قبل از آن، می توانید IF به صورت زیر استفاده کنید.
در SQL Server 2014 و نسخ قبلی هم به طریق زیر می توانید اقدام کنید:
برای رسیدن به خروجی کوئری فوق، در SQL Server 2014 و نسخ قبل از آن، می توانید IF به صورت زیر استفاده کنید.
برای رسیدن به خروجی کوئری فوق، در SQL Server 2014 و نسخ قبل از آن، می توانید IF به صورت زیر استفاده کنید.
برای رسیدن به خروجی کوئری فوق، در SQL Server 2014 و نسخ قبل از آن، می توانید IF به صورت زیر استفاده کنید.
با استفاده از دستور DROP و IF EXISTS می توانید از حذف ناخواسته اشیاء خود در دیتابیس جلوگیری به عل آورید و به همین منوال برای حذف سایر اشیاء یک دیتابیس هم می توانید استفاده کنید.
سرانجام مایکروسافت در آیتم اختیاری IF EXISTS را در Drop معرفی کرد. هنگام افزودن IF EXISTS در دستور drop ، فقط در صورت وجود آن شیء در پایگاه داده ، شیء را Drop می کند.
Syntax آن بدین صورت می باشد:
DROP object_type [ IF EXISTS ] object_name
از هم اکنون ، DROP IF EXISTS می تواند برای اشیایی همچون دیتابیس، table, procedure, view, function, index, trigger, default, rule, schema, aggregate, assembly, role, type, user, security policy, sequence and synonym مورد استفاده قرار گیرد. IF EXISTS همچنین می تواند در ALTER TABLE برای Drop کردن ستون یا constraint استفاده شود.
اگر بدون استفاده از IF EXISTS سعی در حذف شیء ای که وجود ندارد کنید، با خطا مواجه می شوید.
DROP TABLE SomeTable
GO
/* Error Message */
Msg 3701, Level 11, State 5, Line 471
Cannot drop the table 'SomeTable',
because it does not exist or you do not have permission.
وقتی از IF EXISTS در Drop استفاده می کنید، حتی اگر شی موجود نباشد ، موتور SQL Server بدون هر گونه خطا، اجرای مراحل بعدی را ادامه خواهد داد. اگر به مثال زیر توجه کنید با اینکه جدول مورد نظر وجود نداردف خطایی نشان داده نشده و مراحل بعد اجرا می شود.
DROP TABLE IF EXISTS SomeTable
Select GetDate()
GO
/* Result */
-----------------------
2017-10-28 22:00:29.867
(1 row(s) affected)
در ادامه کار مثال هایی از دستور DROP IF EXISTS در SQL Server را مشاهده خواهید کرد.
همانطور که بالاتر گفته شد، اگر IF EXISTS در Drop باشد می توان از آن برای چندین آبجکت استفاده کرد. در این پست مثال هایی از Drop اشیاء مانند database، table، procedure، view، function به همراه Drop کردن ستون و constraint را خواهید دید. پس ابتدای امر دیتابیس و سایر آبجکت ها مورد نیاز در آن را ایجاد می کنیم.
/* Create a database */
CREATE DATABASE MyTecBitsSampleDB
GO
USE MyTecBitsSampleDB
GO
/* Create a table */
CREATE TABLE MyTecBitsUsers (UserId INT, UserName Varchar(100))
GO
/* Create a constraint */
ALTER TABLE MyTecBitsUsers
ADD CONSTRAINT unUserID UNIQUE (UserId);
GO
/* Create a stored procedure */
CREATE PROCEDURE CurrentDate
AS
BEGIN
SELECT GetDate()
END
GO
/* Create a view */
CREATE VIEW vwMyTecBitsUsers
AS
Select * from MyTecBitsUsers
GO
/* Create a user defined function */
CREATE FUNCTION dbo.fnSayHello(@Name Varchar(50))
RETURNS varchar(100)
AS
BEGIN
RETURN('Hello ' + @Name + '!')
END
DROP Stored Procedure IF EXISTS
از SQL Server 2016 و نسخ بعد از آن می توانید با کوئری زیر یک Stored Procedure که در دیتابیس مورد نظرتان وجود دارد را حذف کنید.DROP PROCEDURE IF EXISTS CurrentDate
GO
در SQL Server 2014 و نسخ قبل از آن می توانید با استفاده از IF به همین خروجی برسید.
IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'CurrentDate')
AND type in (N'P', N'PC'))
DROP PROCEDURE CurrentDate
GO
DROP View IF EXISTS
از SQL Server 2016 و نسخ بعد از آن می توانید با کوئری زیر یک View که در دیتابیس مورد نظرتان وجود دارد را حذف کنید.DROP VIEW IF EXISTS vwMyTecBitsUsers
GO
برای رسیدن به خروجی کوئری فوق، در SQL Server 2014 و نسخ قبل از آن، می توانید IF به صورت زیر استفاده کنید.
IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'vwMyTecBitsUsers')
AND type = N'V')
DROP VIEW vwMyTecBitsUsers
GO
DROP Function IF EXISTS
از SQL Server 2016 و نسخ بعد از آن می توانید با کوئری زیر یک Function که در دیتابیس مورد نظرتان وجود دارد را حذف کنید.DROP FUNCTION IF EXISTS fnSayHello
GO
برای رسیدن به خروجی کوئری فوق، در SQL Server 2014 و نسخ قبل از آن، می توانید IF به صورت زیر استفاده کنید.
IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'fnSayHello')
AND type = N'FN')
DROP FUNCTION fnSayHello
GO
DROP Constraint IF EXISTS
برای حذف یک constraint از یک جدول از دستور زیر استفاده کنید و حتی اگر constraint در آن جدول وجود نداشته باشد هم می توانید از این دستور استفاده کنید.ALTER TABLE MyTecBitsUsers DROP CONSTRAINT IF EXISTS unUserID
GO
در SQL Server 2014 و نسخ قبلی هم به طریق زیر می توانید اقدام کنید:
IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'unUserID')
AND type = N'UQ')
ALTER TABLE MyTecBitsUsers DROP CONSTRAINT unUserID
GO
DROP Column IF EXISTS
برای حذف یک column از یک جدول از کوئری زیر استفاده کنید.ALTER TABLE MyTecBitsUsers DROP COLUMN IF EXISTS UserName
GO
برای رسیدن به خروجی کوئری فوق، در SQL Server 2014 و نسخ قبل از آن، می توانید IF به صورت زیر استفاده کنید.
IF EXISTS (SELECT 1 FROM sys.columns Where object_id = OBJECT_ID(N'MyTecBitsUsers')
AND name = 'UserName')
ALTER TABLE MyTecBitsUsers DROP COLUMN UserName
GO
DROP Table IF EXISTS
از SQL Server 2016 و نسخ بعد از آن می توانید با کوئری زیر یک Table که در دیتابیس مورد نظرتان وجود دارد را حذف کنید.DROP TABLE IF EXISTS MyTecBitsUsers
GO
برای رسیدن به خروجی کوئری فوق، در SQL Server 2014 و نسخ قبل از آن، می توانید IF به صورت زیر استفاده کنید.
IF EXISTS (SELECT 1 FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTecBitsUsers')
AND type = N'U')
DROP TABLE MyTecBitsUsers
GO
DROP Database IF EXISTS
از SQL Server 2016 و نسخ بعد از آن می توانید با کوئری زیر یک Database که در دیتابیس مورد نظرتان وجود دارد را حذف کنید.DROP DATABASE IF EXISTS MyTecBitsSampleDB
GO
برای رسیدن به خروجی کوئری فوق، در SQL Server 2014 و نسخ قبل از آن، می توانید IF به صورت زیر استفاده کنید.
IF EXISTS (SELECT 1 FROM sys.databases WHERE database_id = DB_ID(N'MyTecBitsSampleDB'))
DROP DATABASE MyTecBitsSampleDB
GO
با استفاده از دستور DROP و IF EXISTS می توانید از حذف ناخواسته اشیاء خود در دیتابیس جلوگیری به عل آورید و به همین منوال برای حذف سایر اشیاء یک دیتابیس هم می توانید استفاده کنید.
نمایش دیدگاه ها (0 دیدگاه)
دیدگاه خود را ثبت کنید: