আমি জানি এটি অবশ্যই সহজ হতে পারে তবে আমি কোনও ফাংশন তৈরির উপস্থাপনা করব কিনা তা পরীক্ষা করে দেখতে ইতিমধ্যে বিদ্যমান কিনা? যদি এটি বিদ্যমান থাকে তবে আমি এটিকে ফেলে এবং পুনরায় তৈরি করতে চাই।
আমি জানি এটি অবশ্যই সহজ হতে পারে তবে আমি কোনও ফাংশন তৈরির উপস্থাপনা করব কিনা তা পরীক্ষা করে দেখতে ইতিমধ্যে বিদ্যমান কিনা? যদি এটি বিদ্যমান থাকে তবে আমি এটিকে ফেলে এবং পুনরায় তৈরি করতে চাই।
উত্তর:
IF EXISTS (
SELECT * FROM sysobjects WHERE id = object_id(N'function_name')
AND xtype IN (N'FN', N'IF', N'TF')
)
DROP FUNCTION function_name
GO
আপনি যদি সিস * টেবিলগুলি এড়াতে চান তবে আপনি এর পরিবর্তে এটি করতে পারেন ( এখান থেকে উদাহরণস্বরূপ এ):
IF object_id(N'function_name', N'FN') IS NOT NULL
DROP FUNCTION function_name
GO
আপনি যে ধরণের ফাংশন মুছার চেষ্টা করছেন তা ধরার মূল বিষয় হ'ল (শীর্ষস্থানীয় এসকিএল এফএন, আইএফ এবং টিএফ দ্বারা চিহ্নিত):
if object_id('FUNCTION_NAME') is not NULL
DROP FUNCTION <name>
আপনি সিসোবজেক্টগুলিতেও নামটি দেখতে পারেন
IF EXISTS (SELECT *
FROM sysobjects
WHERE name='<function name>' and xtype='FN'
আসলে, যদি ফাংশনটি কোনও টেবিল ফাংশন হতে পারে তবে আপনাকে ব্যবহার করা দরকার
xtype in ('FN','TF')
এসকিউএল সার্ভার 2016 এ পদ্ধতিটি ড্রপ এবং পুনরায় তৈরি করার জন্য আপনার কাছে দুটি বিকল্প রয়েছে।
এসকিউএল সার্ভার 2016 থেকে শুরু হচ্ছে - ব্যবহার করুন IF EXISTS
DROP FUNCTION [ IF EXISTS ] { [ schema_name. ] function_name } [ ,...n ] [;]
এসকিউএল সার্ভার 2016 এসপি 1 থেকে শুরু করে - ব্যবহার করুন OR ALTER
CREATE [ OR ALTER ] FUNCTION [ schema_name. ] function_name
IF EXISTS
(SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'functionName')
AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION functionName
GO
আমি সাধারণত সিএস * টাইপ টেবিলগুলি থেকে প্রশ্নগুলি থেকে বিরত থাকি, বিক্রেতারা এগুলি প্রকাশের মধ্যে প্রধান বা অন্যথায় পরিবর্তন করতে থাকে। আমি সর্বদা যা করেছি তা হ'ল DROP FUNCTION <name>
বিবৃতি জারি করা এবং কোনও এসকিউএল ত্রুটি যাতে ফিরে আসতে পারে সে সম্পর্কে চিন্তা না করা। আমি সেই মানক পদ্ধতিটি ডিবিএ রাজ্যে বিবেচনা করি।
IF EXISTS
(SELECT *
FROM schema.sys.objects
WHERE name = 'func_name')
DROP FUNCTION [dbo].[func_name]
GO
এই আমার গ্রহণ করা এখানে:
if(object_id(N'[dbo].[fn_Nth_Pos]', N'FN')) is not null
drop function [dbo].[fn_Nth_Pos];
GO
CREATE FUNCTION [dbo].[fn_Nth_Pos]
(
@find char, --char to find
@search varchar(max), --string to process
@nth int --occurrence
)
RETURNS int
AS
BEGIN
declare @pos int --position of nth occurrence
--init
set @pos = 0
while(@nth > 0)
begin
set @pos = charindex(@find,@search,@pos+1)
set @nth = @nth - 1
end
return @pos
END
GO
--EXAMPLE
declare @files table(name varchar(max));
insert into @files(name) values('abc_1_2_3_4.gif');
insert into @files(name) values('zzz_12_3_3_45.gif');
select
f.name,
dbo.fn_Nth_Pos('_', f.name, 1) as [1st],
dbo.fn_Nth_Pos('_', f.name, 2) as [2nd],
dbo.fn_Nth_Pos('_', f.name, 3) as [3rd],
dbo.fn_Nth_Pos('_', f.name, 4) as [4th]
from
@files f;
যদি কার্যের জন্য উপস্থিত থাকে তবে পরীক্ষা করুন
IF EXISTS (SELECT TOP 1 1 FROM sys.objects WHERE
object_id = OBJECT_ID(N'[Schema].[function_Name]')
AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
BEGIN
DROP FUNCTION [Schema].[function_Name]
Print('function dropped => [Schema].[function_Name]')
END
GO
যদি সঞ্চিত পদ্ধতির জন্য অস্তিত্ব থাকে তা নীচের লিঙ্কে ক্লিক করে ফাংশনটি পরীক্ষা করুন http://www.gurujipPoint.com/2017/05/check-if-exist-for-trigger-function-and.html