আমি এসকিউএল সার্ভার ২০০৮-এ একটি সঞ্চিত পদ্ধতি লিখছি। যদি তা না হয় তবে আমার এটি তৈরি করা দরকার।
আমি এটা কিভাবে করবো?
CREATE TABLE IF NOT EXISTS ...
আমি এসকিউএল সার্ভার ২০০৮-এ একটি সঞ্চিত পদ্ধতি লিখছি। যদি তা না হয় তবে আমার এটি তৈরি করা দরকার।
আমি এটা কিভাবে করবো?
CREATE TABLE IF NOT EXISTS ...
উত্তর:
এটার মতো কিছু
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[YourTable]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[YourTable](
....
....
....
)
END
if (not exists (select object_id from sys.objects where object_id = OBJECT_ID(N'[dbo].[client_tgi_g67_period_list]') and type = 'U'))
কেবল বৈপরীত্যের জন্য, আমি নিচের মত objectজেক্ট_আইডি ফাংশনটি ব্যবহার করতে চাই। এটি পড়তে কিছুটা সহজ, এবং আপনার sys.objects বনাম সিসোবজেক্টগুলি বনাম sys.all_objects বনাম sys.tables সম্পর্কে চিন্তা করার দরকার নেই। প্রাথমিক ফর্ম:
IF object_id('MyTable') is not null
PRINT 'Present!'
ELSE
PRINT 'Not accounted for'
অবশ্যই সেই নামের সাথে যদি কোনও বস্তু উপস্থিত থাকে তবে এটি "উপস্থাপক" হিসাবে প্রদর্শিত হবে । আপনি যদি কেবল টেবিলগুলি পরীক্ষা করতে চান তবে আপনার প্রয়োজন:
IF object_id('MyTable', 'U') is not null
PRINT 'Present!'
ELSE
PRINT 'Not accounted for'
এটি টেম্প টেবিলগুলির জন্যও কাজ করে:
IF object_id('tempdb.dbo.#MyTable') is not null
PRINT 'Present!'
ELSE
PRINT 'Not accounted for'
আসুন নীচের স্ক্রিপ্ট দ্বারা একটি টেবিল সহ একটি নমুনা ডাটাবেস তৈরি করুন:
CREATE DATABASE Test
GO
USE Test
GO
CREATE TABLE dbo.tblTest (Id INT, Name NVARCHAR(50))
পদ্ধতির 1: INFORMATION_SCHEMA.TABLES ভিউ ব্যবহার করে
বর্তমান ডাটাবেসে কোনও টিবিএলটেষ্ট টেবিল বিদ্যমান কিনা তা পরীক্ষা করতে আমরা নীচের মতো একটি কোয়েরি লিখতে পারি।
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'tblTest')
BEGIN
PRINT 'Table Exists'
END
উপরের ক্যোয়ারী বর্তমান ডাটাবেসের সমস্ত স্কিমা জুড়ে tblTest টেবিলের অস্তিত্ব পরীক্ষা করে। এর পরিবর্তে যদি আপনি নির্দিষ্ট স্কিমা এবং নির্দিষ্ট ডেটাবেসে সারণীর অস্তিত্ব পরীক্ষা করতে চান তবে আমরা উপরের ক্যোয়ারীটি নীচের মত লিখতে পারি:
IF EXISTS (SELECT * FROM Test.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = N'dbo' AND TABLE_NAME = N'tblTest')
BEGIN
PRINT 'Table Exists'
END
এই পদ্ধতির প্রসেস: INFORMATION_SCHEMA দর্শনগুলি বিভিন্ন আরডিবিএমএস সিস্টেমের মধ্যে বহনযোগ্য, তাই বিভিন্ন আরডিবিএমএসে পোর্টিংয়ে কোনও পরিবর্তন প্রয়োজন হয় না।
পদ্ধতির 2: OBJECT_ID () ফাংশন ব্যবহার করে
OBJECT_ID()
বর্তমান ডাটাবেসে কোনও টিবিএলটেষ্ট টেবিল বিদ্যমান কিনা তা পরীক্ষা করতে আমরা নীচের মতো ফাংশন ব্যবহার করতে পারি ।
IF OBJECT_ID(N'dbo.tblTest', N'U') IS NOT NULL
BEGIN
PRINT 'Table Exists'
END
সারণির নামের জন্য ডেটাবেস নাম এবং স্কিমা নাম অংশ নির্দিষ্ট করা alচ্ছিক। তবে ডেটাবেস নাম এবং স্কিমা নাম উল্লেখ করে সমস্ত স্কিমা জুড়ে বর্তমান ডাটাবেসে পরীক্ষা করার পরিবর্তে নির্দিষ্ট ডাটাবেসে এবং নির্দিষ্ট স্কিমার মধ্যে সারণির অস্তিত্ব পরীক্ষা করার জন্য একটি বিকল্প সরবরাহ করা হয়। ক্যোয়ারী শো যে যদিও বর্তমান ডাটাবেসের শ্রীরামকৃষ্ণ ডাটাবেস, আমরা অস্তিত্ব পরীক্ষা করতে পারবেন নিচের tblTest
টেবিল dbo
এ স্কিমা Test
ডাটাবেস।
USE MASTER
GO
IF OBJECT_ID(N'Test.dbo.tblTest', N'U') IS NOT NULL
BEGIN
PRINT 'Table Exists'
END
পেশাদাররা: মনে রাখা সহজ OBJECT_ID()
ফাংশন সম্পর্কে উল্লেখ করার জন্য অন্য একটি উল্লেখযোগ্য বিষয় হ'ল: এটি বর্তমান সংযোগ প্রসঙ্গে তৈরি করা অস্থায়ী সারণীর অস্তিত্ব যাচাইয়ের জন্য একটি বিকল্প সরবরাহ করে। অন্যান্য সমস্ত পন্থা কেবলমাত্র বর্তমান সংযোগ প্রসঙ্গে পরিবর্তে সমস্ত সংযোগ প্রসঙ্গে জুড়ে তৈরি অস্থায়ী সারণীর অস্তিত্ব পরীক্ষা করে। OBJECT_ID()
ক্রিয়াকলাপের সাহায্যে অস্থায়ী সারণীর অস্তিত্ব কীভাবে পরীক্ষা করা যায় তা নীচের প্রশ্নের মাধ্যমে দেখানো হয়েছে :
CREATE TABLE #TempTable(ID INT)
GO
IF OBJECT_ID(N'TempDB.dbo.#TempTable', N'U') IS NOT NULL
BEGIN
PRINT 'Table Exists'
END
GO
পদ্ধতির 3: সিস.অবজেক্টস ক্যাটালগ ভিউ ব্যবহার করে
Sys.Objects
নীচে প্রদর্শিত হিসাবে সারণীর অস্তিত্ব যাচাই করতে আমরা ক্যাটালগ ভিউটি ব্যবহার করতে পারি :
IF EXISTS(SELECT 1 FROM sys.Objects WHERE Object_id = OBJECT_ID(N'dbo.tblTest') AND Type = N'U')
BEGIN
PRINT 'Table Exists'
END
পদ্ধতির 4: সিস. টেবিলগুলি ক্যাটালগ ভিউ ব্যবহার করে
Sys.Tables
নীচে প্রদর্শিত হিসাবে সারণীর অস্তিত্ব যাচাই করতে আমরা ক্যাটালগ ভিউটি ব্যবহার করতে পারি :
IF EXISTS(SELECT 1 FROM sys.Tables WHERE Name = N'tblTest' AND Type = N'U')
BEGIN
PRINT 'Table Exists'
END
Sys.Tables
ক্যাটালগ ভিউ ক্যাটালগ ভিউ থেকে সারিগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হয় Sys.Objects
, Sys.objects
ক্যাটালগ ভিউটি বেস ভিউ হিসাবে sys.Tables
উল্লেখ করা হয় যেখানে উত্পন্ন ভিউ হিসাবে উল্লেখ করা হয়। Sys.Tables
কেবল সারণি অবজেক্টের জন্য সারিগুলি ফিরিয়ে দেবে যেখানে Sys.Object
টেবিলের বস্তুগুলির জন্য সারিগুলি ফিরিয়ে দেওয়া ছাড়া এটি বস্তুর জন্য সারিগুলি প্রদান করে: সঞ্চিত পদ্ধতি, দর্শন ইত্যাদি
পদ্ধতির 5: সিসি.সোসোবজেক্টস সিস্টেম সারণীটি ব্যবহার করা এড়ানো উচিত
আমাদের sys.sysobjects
সিস্টেম টেবিলটি সরাসরি ব্যবহার করা এড়ানো উচিত , এটির সরাসরি অ্যাক্সেসটি এসকিএল সার্ভারের কিছু ভবিষ্যতের সংস্করণগুলিতে হ্রাস করা হবে। [মাইক্রোসফ্ট বিএল] [১] লিঙ্ক অনুসারে, মাইক্রোসফ্ট সিস্টেম সিস্টেমের টেবিলের sys.objects/sys.tables
পরিবর্তে ক্যাটালগ ভিউগুলি sys.sysobjects
সরাসরি ব্যবহার করার পরামর্শ দিচ্ছে ।
IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'tblTest' AND xtype = N'U')
BEGIN
PRINT 'Table Exists'
END
তথ্যসূত্র: http://sqlhints.com/2014/04/13/how-to-check-if-a-table-exists-in-sql-server/
IF (EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'd020915'))
BEGIN
declare @result int
set @result=1
select @result as result
END
Declare @Username varchar(20)
Set @Username = 'Mike'
if not exists
(Select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'tblEmp')
Begin
Create table tblEmp (ID int primary key, Name varchar(50))
Print (@Username + ' Table created successfully')
End
Else
Begin
Print (@Username + ' : this Table Already exists in the database')
End
ডাটাবেসে কোনও সারণীর অস্তিত্বের জন্য নিম্নলিখিত বিবৃতিটি ব্যবহার করে দেখুন:
If not exists (select name from sysobjects where name = 'tablename')
আপনি যদি ব্লকের ভিতরে টেবিল তৈরি করতে পারেন।
sysobjects
এটি একটি সামঞ্জস্যতা দর্শন যা কেবলমাত্র পুরানো কোডটি ভাঙ্গা এড়ানোর জন্য বিদ্যমান। আমার পরামর্শ সিস্টেম ক্যাটালগ মতামত (যেমন হবে sys.objects
, sys.tables
কোডের জন্য) যে শুধুমাত্র SQL সার্ভার লক্ষ্য হবে 2008 দৃষ্টান্ত, এবং তথ্য স্কিমা মতামত (যেমন information_schema.tables
কোডের জন্য) যে চাহিদা পোর্টেবল যাবে। আপনি এখানে বিভিন্ন দর্শনে আরও তথ্য পেতে পারেন: এসকিউএল সার্ভার সিস্টেম ক্যাটালগের অনুসন্ধান করা হচ্ছে
আমি যদি ভুল না করি তবে এটি কাজ করা উচিত:
if not exists (Select 1 from tableName)
create table ...