خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را


استفاده از DROP و IF EXISTS در SQL Server

 استفاده از 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 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
در ادامه کار مثال هایی از دستور 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

استفاده از DROP و IF EXISTS در SQL Server
در 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

استفاده از DROP و IF EXISTS در SQL Server
برای رسیدن به خروجی کوئری فوق، در 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

استفاده از DROP و IF EXISTS در SQL Server
برای رسیدن به خروجی کوئری فوق، در 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

استفاده از DROP و IF EXISTS در SQL Server
در 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

استفاده از DROP و IF EXISTS در SQL Server
برای رسیدن به خروجی کوئری فوق، در 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

استفاده از DROP و IF EXISTS در SQL Server
برای رسیدن به خروجی کوئری فوق، در 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

استفاده از DROP و IF EXISTS در SQL Server
برای رسیدن به خروجی کوئری فوق، در 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 دیدگاه)

دیدگاه خود را ثبت کنید:

انتخاب تصویر ویرایش حذف
توجه! حداکثر حجم مجاز برای تصویر 500 کیلوبایت می باشد.


دسته بندی مطالب خوش آموز