কোনও এসকিউএল সার্ভারের টেবিলে কোনও কলাম রয়েছে কিনা তা কীভাবে পরীক্ষা করবেন?


1852

এটি নির্দিষ্ট না থাকলে আমার একটি নির্দিষ্ট কলাম যুক্ত করতে হবে। আমার নীচের মতো কিছু রয়েছে তবে এটি সর্বদা মিথ্যা দেয়:

IF EXISTS(SELECT *
          FROM   INFORMATION_SCHEMA.COLUMNS
          WHERE  TABLE_NAME = 'myTableName'
                 AND COLUMN_NAME = 'myColumnName') 

এসকিউএল সার্ভার ডাটাবেসের কোনও সারণীতে একটি কলাম বিদ্যমান কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?


12
আমি মনে করি না যে প্রশ্নে কোডটিতে কোনও সমস্যা আছে: ২০০৮ আর 2-এ আমার জন্য ভাল কাজ করে। (সম্ভবত আপনি এটি ভুল ডাটাবেসে চালিয়ে যাচ্ছেন? সম্ভবত আপনার ডাটাবেসটি কেস-সংবেদনশীল ছিল এবং আপনার মাই টেবিলনাম / মাইক্রোমনেম স্ট্রিংগুলিতে আপনার কেসটি সঠিক ছিল না? এই জাতীয় কোয়েরিটি COL_LENGTH সমাধানের চেয়ে আরও নমনীয় বলে মনে হচ্ছে: আমি সক্ষম একটি ভিন্ন ডাটাবেস বিরুদ্ধে এবং এমনকি উপযুক্ত "INFORMATION_SCHEMA" prefixing দ্বারা একটি ডাটাবেস যোগসূত্রটির উপরে এটি চালানোর জন্য যে কাজ করতে কিভাবে COL_LENGTH মেটাডাটা-ফাংশন দেখতে না
mwardm

3
@ মওয়ার্ডম - ভাল COL_LENGTH('AdventureWorks2012.HumanResources.Department ','ModifiedDate')কাজ করে।
মার্টিন স্মিথ

6
সামান্য সম্পর্কিত ইঙ্গিত: আপনি যদি কলাম সংযোজনের ঠিক পরে কোনও কলাম আপডেট করতে চান (আমি বিশ্বাস করি যে অনেক ব্যবহারকারী এই উদ্দেশ্যে এই নিবন্ধটি অনুসন্ধান করেছিলেন), আপনি EXEC sp_executesqlগঠিত UPDATEবিবৃতি দিয়ে ব্যবহার করতে পারেন ।
ক্যাসান্দ্রাদ

আসল উত্তরটি হ'ল আপনার যে ডাটাবেসটি পরীক্ষা করা হচ্ছে তা যুক্ত করা উচিত তাই এটিFROM [YourDatabase].INFORMATION_SCHEMA.COLUMNS
অ্যালেক্স কুইটনি

উত্তর:


2053

এসকিউএল সার্ভার ২০০৫ এর পরে:

IF EXISTS(SELECT 1 FROM sys.columns 
          WHERE Name = N'columnName'
          AND Object_ID = Object_ID(N'schemaName.tableName'))
BEGIN
    -- Column Exists
END

মার্টিন স্মিথের সংস্করণ সংক্ষিপ্ত:

IF COL_LENGTH('schemaName.tableName', 'columnName') IS NOT NULL
BEGIN
    -- Column Exists
END

মার্টিন স্মিথের সংস্করণে, উল্লেখ করার মতো একটি বিষয় হল বর্গাকার বন্ধনীগুলির মধ্যে কলামের নাম অন্তর্ভুক্ত করা উচিত নয় []। যখন কলামনাম বর্গাকার বন্ধনীগুলির ভিতরে থাকে [], এটি কলামটি টেবিলে উপস্থিত থাকলেও তা বাতিল দেবে
হেমেন্দ্র

@ হেমেন্দ্রসিংহচৌহান - এটি কারণ যে তারা নামের অংশ নয়। নামের সাথে তুলনা করার সময় আপনি এটিও পাবেনsys.columns
মার্টিন স্মিথ

@ মার্টিনস্মিত এটি জানতেন না, আমি আপনার উত্তরটি ব্যবহার করছি এবং এটি পেরিয়ে এসেছি। সাধারণত আমি কলাম যুক্ত করার সময় বর্গাকার বন্ধনী ব্যবহার করি, তাই আমি সেগুলি COL_LENGTH ফাংশনের ভিতরেও ব্যবহার করি। আমার কোডটি এরকম ছিল:Alter table Table_Name Add [ColumnName] NVarchar(max) NULL; Select COL_LENGTH('[TABLE_NAME]', '[COLUMN_NAME]')
হেমেন্দ্র

হ্যাঁ বৈধ নয়। আর্গুমেন্টগুলি COL_LENGTHখালি করা দরকার। তাত্ত্বিকভাবে কারও পক্ষে এমন কলাম তৈরি করা সম্ভব যেটির আসলে নাম রয়েছে [COLUMN_NAME]- উদাহরণস্বরূপ CREATE TABLE #T([[COLUMN_NAME]]] INT); SELECT * FROM #Tএবং তারপরে যদি এটি নিয়ম না হয় তবে এটি দ্বিধাগ্রস্থ হবে।
মার্টিন স্মিথ

987

আরও সংক্ষিপ্ত সংস্করণ

IF COL_LENGTH('table_name','column_name') IS NULL
BEGIN
/* Column does not exist or caller does not have permission to view the object */
END

মেটাডেটা দেখার অনুমতি সম্পর্কিত বিষয়টি কেবলমাত্র এই উত্তরটি নয়, সমস্ত উত্তরের ক্ষেত্রে প্রযোজ্য।

মনে রাখবেন যে প্রথম প্যারামিটার টেবিলের নামটি COL_LENGTHপ্রয়োজন হিসাবে এক, দুই বা তিন অংশের নাম বিন্যাসে থাকতে পারে।

একটি ভিন্ন ডাটাবেসে একটি টেবিলের উল্লেখের উদাহরণ An

COL_LENGTH('AdventureWorks2012.HumanResources.Department','ModifiedDate')

মেটাডেটা ভিউ ব্যবহারের তুলনায় এই উত্তরের সাথে একটি পার্থক্য হ'ল মেটাডেটা ফাংশন যেমন COL_LENGTHসর্বদা কেবল বিচ্ছিন্নতা স্তরটিকে নির্বিশেষে প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলি সম্পর্কিত ডেটা ফেরত দেয়।


11
এটি অন্যান্য উত্তরগুলির তুলনায় কম পঠনযোগ্য, সম্ভবত এটি কেন উচ্চ রেট দেওয়া হয়নি।
বিল ইয়াং

38
@ বিল - কোন উপায়ে কম পাঠযোগ্য? ফায়ারফক্সে ঠিক আছে। এই উত্তরটি স্বীকৃত উত্তরটির চেয়ে 2 বছর পরে পোস্ট করা হয়েছিল, যা আইএমও রেটিংটি ব্যাখ্যা করে। আপনি যদি কম স্পষ্ট করে বোঝাতে চেয়েছিলেন যে এটি একটি অস্তিত্ব চেক করে থাকে তবে এসকিউএল সার্ভারে এই জাতীয় প্রতিমাটি বেশ সাধারণ। যেমন IF OBJECT_ID('TableName','U') IS NULLবস্তুর অস্তিত্ব DB_ID('foo')পরীক্ষা করতে বা ডাটাবেস অস্তিত্ব পরীক্ষা করতে ব্যবহার করে check
মার্টিন স্মিথ

59
@ মার্টিনস্মিত আমি নিশ্চিত যে সে কম পাঠযোগ্য বলে বোঝায় কারণ আপনি যদি এই আইডিয়ামটি না জানতেন এবং আপনি এই কোডটি অন্য কারও কাছ থেকে উত্তরাধিকার সূত্রে পেয়েছেন তবে আপনি কোডটি কী তা তা অবিলম্বে বুঝতে পারবেন না। C ++ এর x>>2পরিবর্তে লেখার মতো ধরণের x/4। আরও ভার্বোজ কোড ( if exists (select column_name from information_schema ...)) আরও অনেক বেশি জায়গা নেয়, তবে এটি কী করে তা বের করার চেষ্টা করে কেউ কখনও তাদের মাথা আঁচড়ান না।
কিপ

22
আরও সংক্ষিপ্ততা ছাড়াও এটি একটি উপায় দ্রুত সমাধান। ক্যাশেড ডাটাবেস মেটাডেটা ব্যবহার করার সময় INFORMATION_SCHEMAদর্শন অ্যাক্সেস বা sys.columnsহিট ডিস্ক COL_LENGTH
wqw

7
এটি সম্ভবত সর্বাধিক রেট দেওয়া উত্তর নয় কারণ এটি অন্যটির 2.5 বছর পরে দেওয়া হয়েছিল। এজন্য দুটি উত্তরের সাথে রেটিং তুলনা করার সময় আমি সর্বদা তারিখগুলি যাচাই করি। যে উত্তরটি অনেক আগে দেওয়া হয়েছিল তা কাটিয়ে উঠতে অনেক বেশি সময় লাগে। ;)
শান

149

আপনার নির্দিষ্ট প্রয়োজনীয়তা অনুসারে নীচে টুইট করুন:

if not exists (select
                     column_name
               from
                     INFORMATION_SCHEMA.columns
               where
                     table_name = 'MyTable'
                     and column_name = 'MyColumn')
    alter table MyTable add MyColumn int

প্রশ্নের সাথে সম্পাদনা মোকাবেলা করার জন্য সম্পাদনা করুন : এটি কাজ করা উচিত - বোকা ভুলগুলির জন্য আপনার কোডটি সাবধানে দেখুন; উদাহরণস্বরূপ আপনার sertোকানোটি যেমন প্রয়োগ করা হচ্ছে আপনি একই ডাটাবেসে INFORMATION_SCHEMA কে জিজ্ঞাসা করছেন? আপনার উভয় বিবৃতিতে আপনার টেবিল / কলামের নাম টাইপ আছে?


3
আমি সবেমাত্র জানতে পেরেছি যে ক্লাবটি সমস্যার সমাধানের পরে TABLE_SCHEMA = 'মাইস্কেমা' যুক্ত করা।
ম্যাকিয়েজ

12
-১: ওপি-র প্রশ্নের উত্তর দেয় না, কেবল ওপি এর বিষয়ে জিজ্ঞাসা না করেও কীভাবে নতুন সংঘর্ষ যুক্ত করা যায় সে সম্পর্কে নতুন তথ্য যুক্ত করে, ওপির মন্তব্যকে সম্বোধন করে না।
আনভিস

1
+1 পরবর্তী যে কোনও উপায়ে ওপি যে অতিরিক্ত তথ্যের জন্য যাচ্ছিল তার অতিরিক্ত বোনাসের সাথে ওপির প্রশ্নের উত্তর পুরোপুরি উত্তর দেয়। এবং এই আমি খুঁজছিলাম ছিল।
বিটারব্লু

74

এটা চেষ্টা কর...

IF NOT EXISTS(
  SELECT TOP 1 1
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE 
    [TABLE_NAME] = 'Employees'
    AND [COLUMN_NAME] = 'EmployeeID')
BEGIN
  ALTER TABLE [Employees]
    ADD [EmployeeID] INT NULL
END

6
এই পদ্ধতিটি এসকিউএল সিই-র সাথেও কাজ করে, অন্যদিকে উল্লিখিত অন্যান্য কয়েকটি পদ্ধতি ব্যবহার করে না।
সোয়াল্টার্স - মনিকা

9
এর SELECT 1পরিবর্তে আপনি ব্যবহার করতে পারেন SELECT TOP 1 1;)।
shA.t

4
একটি EXISTSবিবৃতিতে এসকিউএল স্বয়ংক্রিয়ভাবে কলামগুলি দূরে সরিয়ে দেয় (অনেক বেশি ভালো count(*)) তাই SELECT *যথেষ্ট হবে।
মার্ক এল।

সম্পূর্ণতার স্বার্থে, আপনার and [TABLE_SCHEMA] = '???'যেখানে বিধি যুক্ত করা উচিত তা বিবেচনা করা উচিত ।
অ্যান্ড্রু জেনস

50

লোকেদের জন্য যারা কলামটির অস্তিত্ব পরীক্ষা করছেন এটি এটিকে ফেলে দিন।

থেকে SQL সার্ভার 2016 আপনার বড় পরিবর্তে নতুন ডাই বিবৃতি ব্যবহার করতে পারেন IFচাদরে

ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name

47

আমি INFORMATION_SCHEMA.COLUMNSএকটি সিস্টেম টেবিলের চেয়ে বেশি পছন্দ করব কারণ মাইক্রোসফ্ট সংস্করণগুলির মধ্যে সিস্টেম টেবিলগুলি সংরক্ষণের গ্যারান্টি দেয় না। উদাহরণস্বরূপ, dbo.syscolumnsএসকিউএল ২০০৮ এ এখনও কাজ করে তবে এটি অবহেলা করা হয়েছে এবং ভবিষ্যতে যে কোনও সময় মুছে ফেলা হতে পারে।



5
হ্যাঁ, এটি বলার অপেক্ষা রাখে না কারণ দেখাতে INFORMATION_SCHEMAকেবল এএনএসআই-স্ট্যান্ডার্ড মেটাডেটা থাকে। তবে এটি অস্তিত্ব পরীক্ষার জন্য যথেষ্ট।
ক্রিশ্চান হাইটার

3
মাইক্রোসফ্ট বলেছে "ভবিষ্যতে এসকিউএল সার্ভারের রিলিজে মাইক্রোসফ্ট কলাম তালিকার শেষের দিকে কলাম যুক্ত করে যে কোনও সিস্টেম ক্যাটালগ ভিউয়ের সংজ্ঞা বাড়িয়ে তুলতে পারে production ফিরে আসা কলামগুলি আপনার অ্যাপ্লিকেশন পরিবর্তন করতে এবং ভঙ্গ করতে পারে। এর থেকে বোঝা যায় যে তারা কলামগুলি সরিয়ে ফেলবে না বা তাদের অর্ডার পরিবর্তন করবে না। এটি প্রান্তের ক্ষেত্রেগুলি ছাড়া তবে সকলের জন্য যথেষ্ট যথেষ্ট পিছিয়ে সামঞ্জস্য।
স্যারাইড

42

আপনি যে টেবিলগুলিতে আগ্রহী তা সম্পর্কে বেশ কিছু খুঁজে পেতে আপনি তথ্য স্কিমা সিস্টেমের ভিউগুলি ব্যবহার করতে পারেন:

SELECT *
  FROM INFORMATION_SCHEMA.COLUMNS
 WHERE TABLE_NAME = 'yourTableName'
 ORDER BY ORDINAL_POSITION

আপনি তথ্য_স্কেমার মতামতগুলি ব্যবহার করে দর্শন, সঞ্চিত পদ্ধতি এবং ডেটাবেস সম্পর্কে বেশ কিছু জিজ্ঞাসাবাদ করতে পারেন।


প্রশ্নোত্তরটি ঠিক এটিই ব্যবহার করছে, কলামটি বিদ্যমান না থাকলে কীভাবে যুক্ত করবেন তা তাঁর জানা দরকার।
বীরেল

35

এর মতো কিছু চেষ্টা করুন:

CREATE FUNCTION ColumnExists(@TableName varchar(100), @ColumnName varchar(100))
RETURNS varchar(1) AS
BEGIN
DECLARE @Result varchar(1);
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.Columns WHERE TABLE_NAME = @TableName AND COLUMN_NAME = @ColumnName)
BEGIN
    SET @Result = 'T'
END
ELSE
BEGIN
    SET @Result = 'F'
END
RETURN @Result;
END
GO

GRANT EXECUTE ON  [ColumnExists] TO [whoever]
GO

তারপরে এটি ব্যবহার করুন:

IF ColumnExists('xxx', 'yyyy') = 'F'
BEGIN
  ALTER TABLE xxx
  ADD yyyyy varChar(10) NOT NULL
END
GO

এটি এসকিউএল সার্ভার 2000 এবং এসকিউএল সার্ভার 2005 উভয় ক্ষেত্রেই কাজ করা উচিত S এসকিউএল সার্ভার ২০০৮ সম্পর্কে নিশ্চিত নয়, তবে কেন তা নয় don't


34

প্রথমে পরীক্ষা করুন table/ column( id/ name) সমন্বয়টি dbo.syscolumns(কোনও অভ্যন্তরীণ এসকিউএল সার্ভার টেবিলের ক্ষেত্রে ক্ষেত্রের সংজ্ঞা রয়েছে) এবং ALTER TABLEএটি যুক্ত করার জন্য উপযুক্ত কোয়েরি প্রকাশ না করে কিনা। উদাহরণ স্বরূপ:

IF NOT EXISTS ( SELECT  *
            FROM    syscolumns
            WHERE   id = OBJECT_ID('Client')
                    AND name = 'Name' ) 
ALTER TABLE Client
ADD Name VARCHAR(64) NULL

28

আমার একজন ভাল বন্ধু এবং সহকর্মী আমাকে দেখিয়েছিল যে কীভাবে আপনি IFএসকিউএল ফাংশন OBJECT_IDএবং COLUMNPROPERTYএসকিউএল সার্ভার 2005+ এ একটি কলামের জন্য পরীক্ষা করতে পারেন an আপনি নিম্নলিখিত কিছু অনুরূপ ব্যবহার করতে পারেন:

আপনি নিজের জন্য এখানে দেখতে পারেন

IF (OBJECT_ID(N'[dbo].[myTable]') IS NOT NULL AND
    COLUMNPROPERTY( OBJECT_ID(N'[dbo].[myTable]'), 'ThisColumnDoesNotExist', 'ColumnId') IS NULL)
BEGIN
    SELECT 'Column does not exist -- You can add TSQL to add the column here'
END

1
এবং অবশ্যই, যদি আপনি টেবিলের উপস্থিতি সম্পর্কে আত্মবিশ্বাসী হন তবে আপনি শর্তের প্রথম অংশটি ছেড়ে দিয়ে COLUMNPROPERTYকেবল পরীক্ষা করতে পারেন ।
রুড হেল্ডারম্যান

26
declare @myColumn   as nvarchar(128)
set @myColumn = 'myColumn'
if not exists (
    select  1
    from    information_schema.columns columns 
    where   columns.table_catalog   = 'myDatabase'
        and columns.table_schema    = 'mySchema' 
        and columns.table_name      = 'myTable' 
        and columns.column_name     = @myColumn
    )
begin
    exec('alter table myDatabase.mySchema.myTable add'
    +'    ['+@myColumn+'] bigint       null')
end

22

এটি এসকিউএল 2000 এ আমার জন্য কাজ করেছে:

IF EXISTS 
(
    SELECT * 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_name = 'table_name' 
    AND column_name = 'column_name'
)
BEGIN
...
END

21

এটা চেষ্টা কর

SELECT COLUMNS.*
FROM   INFORMATION_SCHEMA.COLUMNS COLUMNS,
       INFORMATION_SCHEMA.TABLES TABLES
WHERE  COLUMNS.TABLE_NAME = TABLES.TABLE_NAME
       AND Upper(COLUMNS.COLUMN_NAME) = Upper('column_name') 

আপনার প্রয়োজন নেই INFORMATION_SCHEMA.TABLESএবং আপনি কোনও নির্দিষ্ট টেবিলের জন্য কলামগুলি ফিল্টার করবেন না, তাই এটি কখনও কখনও পৃথক টেবিলগুলিতে একই কলামের নামের জন্য একাধিক সারি ফেরত দেয়;)।
shA.t

19

এসকিউএল সার্ভার 2000 এর জন্য আমার অনুরূপ দরকার ছিল এবং @ মিচ যেমন উল্লেখ করেছে, এটি কেবল 2005+ এর কাজ করে।

এটি অন্য কাউকে সহায়তা করা উচিত, শেষ পর্যন্ত আমার পক্ষে এটিই কাজ করেছিল:

if exists (
    select * 
    from 
        sysobjects, syscolumns 
    where 
        sysobjects.id = syscolumns.id 
        and sysobjects.name = 'table' 
        and syscolumns.name = 'column')


13
IF NOT EXISTS( SELECT NULL
            FROM INFORMATION_SCHEMA.COLUMNS
           WHERE table_name = 'TableName'
             AND table_schema = 'SchemaName'
             AND column_name = 'ColumnName')  BEGIN

  ALTER TABLE [SchemaName].[TableName] ADD [ColumnName] int(1) NOT NULL default '0';

END;

2
আমি মনে করি আপনি টেবিল_স্কেমা = 'স্কিমা_নাম' বোঝাতে চেয়েছিলেন।
ট্যাব আললেমান

11

গৃহীত উত্তরের একটি টেম্প টেবিল সংস্করণ :

if (exists(select 1 
             from tempdb.sys.columns  
            where Name = 'columnName'
              and Object_ID = object_id('tempdb..#tableName')))
begin
...
end

1
এটি কীভাবে গৃহীত উত্তর থেকে আলাদা? কোনও টেম্প টেবিল কি গৃহীত উত্তরে কাজ করবে না?
জন স্যান্ডার্স

1
সঠিক। গৃহীত উত্তরটি টেম্প টেবিলগুলির জন্য কাজ করে না কারণ 'সিস্টেমে কলামগুলি' অবশ্যই 'টেম্পডবি.সাইস কলামস' হিসাবে নির্দিষ্ট করা উচিত এবং টেবিলের নামটি অবশ্যই 'টেম্পডিবি ..' দ্বারা চালিত হওয়া উচিত।
ক্রোকুসেক


8

গমের উত্তর ভাল, তবে ধরে নেওয়া হয় যে কোনও স্কিমা বা ডাটাবেসে আপনার কোনও অভিন্ন টেবিলের নাম / কলামের নামের জুড়ি নেই। এই অবস্থার জন্য এটি নিরাপদ করতে এটি ব্যবহার করুন ...

select *
from Information_Schema.Columns
where Table_Catalog = 'DatabaseName'
  and Table_Schema = 'SchemaName'
  and Table_Name = 'TableName'
  and Column_Name = 'ColumnName'

8

কলামের অস্তিত্ব পরীক্ষা করার বিভিন্ন উপায় রয়েছে। INFORMATION_SCHEMA.COLUMNSএটি ব্যবহারকারীর সাথে যোগাযোগের জন্য তৈরি করা হওয়ায় আমি দৃ strongly়ভাবে ব্যবহার করার পরামর্শ দেব । নিম্নলিখিত সারণী বিবেচনা করুন:

 sys.objects
 sys.columns

এমনকি কিছু অন্যান্য অ্যাক্সেস পদ্ধতি যাচাই করার জন্য উপলব্ধ system catalog.

এছাড়াও, ব্যবহার করার দরকার নেই SELECT *, কেবল এটির মাধ্যমে পরীক্ষা করুনNULL value

IF EXISTS(
           SELECT NULL 
           FROM INFORMATION_SCHEMA.COLUMNS
           WHERE
             TABLE_NAME = 'myTableName'
             AND COLUMN_NAME = 'myColumnName'
         ) 

1
আপনার SELECT *সাথে থাকা সত্ত্বেও কোনও EXISTSকারণ নেই, কারণ যখন উপস্থিত রয়েছে তখন এটি সমস্ত সারি এবং সমস্ত কলাম নির্বাচন করে না, অভ্যন্তরীণভাবে এটি কেবল অস্তিত্বের জন্য যাচাই করে এবং প্রকৃতপক্ষে সমস্ত সারি এবং কলামগুলির জন্য পরীক্ষা করে না
পবন নোগরিয়া

7

সবচেয়ে সহজ এবং বোধগম্য সমাধান হ'ল:

IF COL_LENGTH('Table_Name','Column_Name') IS NULL
 BEGIN
    -- Column Not Exists, implement your logic
 END 
ELSE
 BEGIN
    -- Column Exists, implement your logic
 END

7

আমি ডাটাবেসে কলাম যুক্ত করতে পরিচালনা করতে একটি সাধারণ স্ক্রিপ্ট এখানে দিচ্ছি:

IF NOT EXISTS (
        SELECT *
        FROM sys.Columns
        WHERE Name = N'QbId'
            AND Object_Id = Object_Id(N'Driver')
        )
BEGIN
    ALTER TABLE Driver ADD QbId NVARCHAR(20) NULL
END
ELSE
BEGIN
    PRINT 'QbId is already added on Driver'
END

এই উদাহরণে, Nameহয় ColumnNameযোগ করা প্রয়োজন এবং Object_Idহয়TableName


4

অনুসন্ধানের কলামটি সারণীতে উপস্থিত রয়েছে কি না তা যাচাই করার জন্য নীচের ক্যোরি ব্যবহার করা যেতে পারে। নীচে দেখানো অনুসারে আমরা অনুসন্ধানের ফলাফলের ভিত্তিতে সিদ্ধান্ত নিতে পারি।

IF EXISTS (SELECT 'Y' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = <YourTableName> AND COLUMN_NAME = <YourColumnName>)
  BEGIN
    SELECT 'Column Already Exists.'
  END
  ELSE
  BEGIN
    ALTER TABLE <YourTableName> ADD <YourColumnName> <DataType>[Size]
  END


1

টেবিল -> স্ক্রিপ্ট টেবিল -> নতুন উইন্ডোজ - আপনার নকশার স্ক্রিপ্ট রয়েছে। নতুন উইন্ডোতে কলামের নামটি পরীক্ষা করে দেখুন


1

প্রদত্ত টেবিলটিতে কলামটি বিদ্যমান কিনা তা পরীক্ষা করতে নীচের ক্যোয়ারীটি সম্পাদন করুন:

IF(SELECT COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'TableName' AND COLUMN_NAME = 'ColumnName') IS NOT NULL
PRINT 'Column Exists in the given table';

1

আরেকটি অবদান হ'ল নিম্নলিখিত নমুনা যা অস্তিত্ব না থাকলে কলাম যুক্ত করে।

    USE [Northwind]
    GO

    IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
                    WHERE TABLE_NAME = 'Categories'
                        AND COLUMN_NAME = 'Note')
    BEGIN

    ALTER TABLE Categories ADD Note NVARCHAR(800) NULL

    END
    GO

আশা করি এটা সাহায্য করবে. সাইমন


0
IF EXISTS(SELECT 1 FROM sys.columns 
      WHERE Name = N'columnName'
      AND Object_ID = Object_ID(N'schemaName.tableName'))

এটি এই সমস্যার মোটামুটি সহজ উপায় এবং সরাসরি এগিয়ে সমাধান হওয়া উচিত। আমি অনুরূপ পরিস্থিতিতে এই একাধিকবার ব্যবহার করেছি। এটি একটি কবজির মতো কাজ করে, এতে কোনও সন্দেহ নেই।



0

কলাম বিদ্যমান না থাকলে কিছু করুন:

BEGIN
    IF (COL_LENGTH('[dbo].[Table]', 'Column ') IS NULL)
    BEGIN
        //Do something
    END
END;

কলাম বিদ্যমান থাকলে কিছু করুন:

BEGIN
    IF (COL_LENGTH('[dbo].[Table]', 'Column ') IS NOT NULL)
    BEGIN
        //Do something
    END
END;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.