sql server টেবিল এসকিউএল সার্ভার বিদ্যমান কিনা পরীক্ষা করুন




sql-server tsql (18)

SQL সার্ভার 2000 এ আপনি চেষ্টা করতে পারেন:

IF EXISTS(SELECT 1 FROM sysobjects WHERE type = 'U' and name = 'MYTABLENAME')
BEGIN
   SELECT 1 AS 'res' 
END

এসকিউএল স্টেটমেন্ট ব্যবহার করে SQL সার্ভার 2000/2005 তে একটি টেবিল বিদ্যমান কিনা তা পরীক্ষা করার চূড়ান্ত আলোচনা হতে চাই।

আপনি উত্তর দেওয়ার জন্য গুগল যখন, আপনি অনেক ভিন্ন উত্তর পেতে। এটা করার একটি সরকারী / পিছনে এবং এগিয়ে সামঞ্জস্যপূর্ণ উপায় আছে কি?

এখানে এটা করার দুটি সম্ভাব্য উপায়। দুইটি মধ্যে কোনটি এটি করার আদর্শ / সর্বোত্তম উপায়?

প্রথম উপায়:

IF EXISTS (SELECT 1 
           FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_TYPE='BASE TABLE' 
           AND TABLE_NAME='mytablename') 
   SELECT 1 AS res ELSE SELECT 0 AS res;

দ্বিতীয় উপায়:

IF OBJECT_ID (N'mytablename', N'U') IS NOT NULL 
   SELECT 1 AS res ELSE SELECT 0 AS res;

MySQL সহজ উপলব্ধ করা হয়

SHOW TABLES LIKE '%tablename%'; 

বিবৃতি। আমি অনুরূপ কিছু খুঁজছেন।


IF EXISTS (   SELECT * FROM   dbo.sysobjects WHERE  id = OBJECT_ID(N'dbo.TableName') AND OBJECTPROPERTY(id, N'IsUserTable') = 1 )
BEGIN
  SELECT * FROM dbo.TableName;
END
GO

যে কেউ এখনো তাদের সমাধান খুঁজে পাওয়া যায়নি এমন কিছু জানতে গুরুত্বপূর্ণ: SQL সার্ভার! = MYSQL । আপনি যদি মাইএসকিউএল এর সাথে এটি করতে চান তবে এটি বেশ সহজ

    $sql = "SELECT 1 FROM `db_name`.`table_name` LIMIT 1;";
    $result = mysql_query($sql);
    if( $result == false )
        echo "table DOES NOT EXIST";
    else
        echo "table exists";

এটি এখানে পোস্ট করার কারণ এটি Google এ শীর্ষ আঘাত।


IF EXISTS 
(
    SELECT   * 
    FROM     sys.objects 
    WHERE    object_id = OBJECT_ID(N'[dbo].[Mapping_APCToFANavigator]') 
             AND 
             type in (N'U')
)
BEGIN

    -- Do whatever you need to here.

END

এখানে উপরের কোডে, টেবিল নামটি Mapping_APCToFANavigator


যতক্ষণ আমি মনে করি আমরা সর্বদা OBJECT_ID শৈলীটি ব্যবহার করি

IF OBJECT_ID('*objectName*', 'U') IS NOT NULL 

এক ডেটাবেস বিবেচনা করুন আপনার একটি টেবিল T1 আছে। আপনি অন্যান্য ডেটাবেসে স্ক্রিপ্ট চালাতে চান - যদি টি 1 বিদ্যমান থাকে তবে অন্য কিছু টি টি তৈরি করুন না। এই খোলা ভিজ্যুয়াল স্টুডিও করতে এবং নিম্নলিখিত কাজ করতে:

টি 1 টিতে রাইট ক্লিক করুন, তারপরে স্ক্রিপ্ট টেবিল, তারপর DROP এবং তৈরি করুন, তারপরে নতুন ক্যুইরি সম্পাদক

আপনি আপনার পছন্দসই প্রশ্নের পাবেন। কিন্তু সেই স্ক্রিপ্টটি কার্যকর করার আগে আপনি যদি একের পর এক নতুন তৈরি করতে না চান তবে প্রশ্নটিতে ড্রপ বিবৃতিটি মন্তব্য করতে ভুলবেন না।

ধন্যবাদ


- একটি টেবিল বিদ্যমান কিনা তা পরীক্ষা করার পদ্ধতি তৈরি করুন

DELIMITER $$

DROP PROCEDURE IF EXISTS `checkIfTableExists`;

CREATE PROCEDURE checkIfTableExists(
    IN databaseName CHAR(255),
    IN tableName CHAR(255),
    OUT boolExistsOrNot CHAR(40)
)

  BEGIN
      SELECT count(*) INTO boolExistsOrNot FROM information_schema.TABLES
      WHERE (TABLE_SCHEMA = databaseName)
      AND (TABLE_NAME = tableName);
  END $$

DELIMITER ;

- কিভাবে ব্যবহার করবেন: টেবিল মাইগ্রেশন বিদ্যমান কিনা তা পরীক্ষা করুন

 CALL checkIfTableExists('muDbName', 'migrations', @output);

আপনি বিভিন্ন উপাত্ত উপর কাজ করার প্রয়োজন হলে:

DECLARE @Catalog VARCHAR(255)
SET @Catalog = 'MyDatabase'

DECLARE @Schema VARCHAR(255)
SET @Schema = 'dbo'

DECLARE @Table VARCHAR(255)
SET @Table = 'MyTable'

IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES   
    WHERE TABLE_CATALOG = @Catalog 
      AND TABLE_SCHEMA = @Schema 
      AND TABLE_NAME = @Table))
BEGIN
   --do stuff
END

এছাড়াও যে কোনও কারণে আপনাকে অস্থায়ী টেবিলের জন্য পরীক্ষা করতে হবে তা মনে রাখবেন:

if OBJECT_ID('tempdb..#test') is not null
 --- temp table exists

এই মত প্রশ্নগুলির জন্য একটি INFORMATION_SCHEMA ভিউ ব্যবহার করা সবসময় ভাল। এই মতামতগুলি (বেশিরভাগ) বিভিন্ন বিভিন্ন উপাত্ত জুড়ে মান এবং খুব কমই সংস্করণ থেকে সংস্করণ পরিবর্তন।

একটি টেবিল ব্যবহার বিদ্যমান কিনা তা পরীক্ষা করার জন্য:

IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = 'TheSchema' 
                 AND  TABLE_NAME = 'TheTable'))
BEGIN
    --Do Stuff
END

নীচের পন্থা দেখুন দয়া করে,

পদক্ষেপ 1: INFORMATION_SCHEMA.TABLES দেখুন ব্যবহার করে

বর্তমান ডাটাবেসের মধ্যে একটি গ্রাহক টেবিল বিদ্যমান কিনা তা পরীক্ষা করতে আমরা নীচের মত একটি প্রশ্ন লিখতে পারি।

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'Customers')
BEGIN
    PRINT 'Table Exists'
END

পদক্ষেপ 2: OBJECT_ID () ফাংশন ব্যবহার করে

আমরা বর্তমান ডাটাবেসের মধ্যে একটি গ্রাহক টেবিল বিদ্যমান কিনা তা পরীক্ষা করার জন্য আমরা OBJECT_ID () ফাংশনটি ব্যবহার করতে পারি।

IF OBJECT_ID(N'dbo.Customers', N'U') IS NOT NULL
BEGIN
    PRINT 'Table Exists'
END

পদক্ষেপ 3: Sys.Objects Catalog তালিকা ব্যবহার করে

আমরা নীচে প্রদর্শিত হিসাবে টেবিলের অস্তিত্ব পরীক্ষা করতে Sys.Objects ক্যাটালগ ভিউ ব্যবহার করতে পারেন:

IF EXISTS(SELECT 1 FROM sys.Objects WHERE  Object_id = OBJECT_ID(N'dbo.Customers') AND Type = N'U')
BEGIN
   PRINT 'Table Exists'
END

পদ্ধতি 4: sys.Tables তালিকা দেখুন ব্যবহার করে

আমরা নীচে প্রদর্শিত হিসাবে টেবিলের অস্তিত্ব পরীক্ষা করতে Sys.Tables ক্যাটালগ ভিউ ব্যবহার করতে পারেন:

 IF EXISTS(SELECT 1 FROM sys.Tables WHERE  Name = N'Customers' AND Type = N'U')
 BEGIN
      PRINT 'Table Exists'
 END

পদক্ষেপ 5: সিস্টেম টেবিল sys.sysobjects ব্যবহার এড়িয়ে চলুন

আমরা সি syssobjects সিস্টেম টেবিল সরাসরি ব্যবহার করে এড়ানো উচিত, এটি সরাসরি এক্সেস SQL সার্ভারের কিছু ভবিষ্যতে সংস্করণে বর্জন করা হবে। মাইক্রোসফ্ট বিওল লিংক অনুসারে, মাইক্রোসফ্ট sys.sysobjects সিস্টেম টেবিলের পরিবর্তে ক্যাটালগ দর্শন sys.objects / sys.tables ব্যবহার করার পরামর্শ দিচ্ছে।

  IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'Customers' 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_SCHEMA = 'PutSchemaHere'     
            AND  
            TABLE_NAME   = 'PutTableNameHere'
)

আমি জানি এটি একটি পুরনো প্রশ্ন কিন্তু আপনি যদি এইটিকে প্রায়ই কল করার পরিকল্পনা করেন তবে আমি এই সম্ভাবনাটি খুঁজে পেয়েছি।

create procedure Table_Exists
@tbl varchar(50)
as
return (select count(*) from sysobjects where type = 'U' and name = @tbl)
go

এটি যদি 'চূড়ান্ত' আলোচনা হয়, তবে এটি লক্ষ করা উচিত যে ল্যারি লিওনার্ডের স্ক্রিপ্টটি যদি দূরবর্তী সার্ভারের সাথে সংযোগ থাকে তবে সেগুলিও লিঙ্কযুক্ত হতে পারে।

if exists (select * from REMOTE_SERVER.MyOtherDatabase.sys.tables where name = 'MyTable')
    print 'Exists'

একটি ভিন্ন ডাটাবেসের উপর একটি টেবিল খুঁজছেন:

if exists (select * from MyOtherDatabase.sys.tables where name = 'MyTable')
    print 'Exists'

IF OBJECT_ID('mytablename') IS NOT NULL 

ইনফর্মেশন স্কিমাটি ব্যবহার করার জন্য এসকিউএল স্ট্যান্ডার্ড উপায়টি ব্যবহার করা হয়, তাই এটি যে সমস্ত ডেটাবেসগুলি সমর্থন করে সেগুলি ব্যবহার করা উচিত।


    IF OBJECT_ID (N'dbo.T', N'U') IS NOT NULL 
      BEGIN 
          print 'deleted table';
          drop table t 
      END
    else 
      begin 
          print 'table not found' 
      end

Create table t (id int identity(1,1) not null, name varchar(30) not null, lastname varchar(25) null)
insert into t( name, lastname) values('john','doe');
insert into t( name, lastname) values('rose',NULL);

Select * from t
1   john    doe
2   rose    NULL

-- clean
drop table t




sql-server-2000