SQL සේවාදායක වගුවක තීරුවක් තිබේදැයි පරීක්ෂා කරන්නේ කෙසේද?


1864

එය නොපවතී නම් මට නිශ්චිත තීරුවක් එක් කිරීමට අවශ්‍යයි. මට පහත සඳහන් දේ වැනි දෙයක් ඇත, නමුත් එය සැමවිටම අසත්‍යය වේ:

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

SQL සේවාදායක දත්ත ගබඩාවේ වගුවක තීරුවක් තිබේදැයි පරීක්ෂා කරන්නේ කෙසේද?


12
ප්‍රශ්නයේ කේතයේ කිසියම් වැරැද්දක් ඇතැයි මම නොසිතමි: 2008 R2 හි මා වෙනුවෙන් හොඳින් ක්‍රියා කරයි. (සමහර විට ඔබ එය වැරදි දත්ත ගබඩාවක ධාවනය කර තිබේද? සමහර විට ඔබේ දත්ත සමුදාය සිද්ධි සංවේදී විය හැකි අතර ඔබේ myTableName / myColumnName නූල් වල ඔබට එය නිවැරදිව නොතිබුණි ද? "INFORMATION_SCHEMA" උපසර්ගය මඟින් එය වෙනත් දත්ත සමුදායකට එරෙහිව සහ දත්ත සමුදා සම්බන්ධතාවයක් හරහා ධාවනය කිරීමට. COL_LENGTH පාර-දත්ත ශ්‍රිතය සමඟ එය කරන්නේ කෙසේදැයි බැලීමට නොහැකි විය.
mwardm

3
wardmwardm - COL_LENGTH('AdventureWorks2012.HumanResources.Department ','ModifiedDate')හොඳින් ක්‍රියා කරයි.
මාටින් ස්මිත්

6
සුළු සම්බන්ධිත ඉඟියක්: තීරු එකතු කිරීමෙන් පසු ඔබට තීරුවක් යාවත්කාලීන කිරීමට අවශ්‍ය නම් (බොහෝ පරිශීලකයින් මෙම ලිපිය ඒ සඳහා සොයමින් සිටි බව මම විශ්වාස කරමි), ඔබට EXEC sp_executesqlසැකසූ UPDATEප්‍රකාශයක් සමඟ භාවිතා කළ හැකිය .
cassandrad

සැබෑ පිළිතුර ඔබ ඒක නිසා ඔබට විරුද්ධ ව පරීක්ෂා වන දත්ත සමුදාය එකතු කළ යුතුය වේFROM [YourDatabase].INFORMATION_SCHEMA.COLUMNS
ඇලෙක්ස් Kwitny

Answers:


2067

SQL සේවාදායකය 2005 සිට:

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

මාටින් ස්මිත්ගේ අනුවාදයේ සඳහන් කළ යුතු එක් කරුණක් වන්නේ තීරු නම වර්ග වරහන් තුළ ඇතුළත් නොකිරීමයි. තීරු නම වර්ග වරහන් තුළ ඇති විට [], වගුවේ තීරුව පැවතියද එය අහෝසි වේ
හේමන්ද්‍ර

Em හේමන්ද්‍රසිං චෞහාන් - ඒ ඔවුන් නමේ කොටසක් නොවන බැවිනි. ඔබ ද එම නම සමඟ සංසන්දනය කරන විට බව ඔබට පෙනී යනු ඇතsys.columns
මාටින් ස්මිත්

Ar මාටින් ස්මිත් එය දැන සිටියේ නැත, මම ඔබේ පිළිතුර භාවිතා කරමින් මෙය තේරුම් ගතිමි. සාමාන්‍යයෙන් මම තීරු එකතු කිරීමේදී වර්ග වරහන් භාවිතා කරමි, එබැවින් මම ඒවා 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මෙය රීතිය නොවේ නම් එය අපැහැදිලි වනු ඇත.
මාටින් ස්මිත්

993

වඩාත් සංක්ෂිප්ත අනුවාදය

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පරිදි එක්, දෙකක හෝ තුනක කොටස් නාම ආකෘතියකින් විය හැකි බව සලකන්න.

වෙනත් දත්ත ගබඩාවක වගුවක් යොමු කිරීම උදාහරණයක්

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

පාරදත්ත දර්ශන භාවිතා කිරීමට සාපේක්ෂව මෙම පිළිතුර සමඟ ඇති එක් වෙනසක් නම්, පාරදත්ත ක්‍රියාකාරිත්වයන් යනු COL_LENGTHහුදකලා මට්ටම නොතකා සෑම විටම කැපවූ වෙනස්කම් පිළිබඳ දත්ත පමණක් ලබා දීමයි .


11
මෙය වෙනත් සමහර පිළිතුරු වලට වඩා අඩු කියවිය හැකි ය, බොහෝ විට එය එතරම් ඉහළ අගයක් නොගන්නේ මන්ද.
බිල් යැං

38
Ill බිල් - කියවිය හැකි ප්‍රමාණය අඩු වන්නේ කුමන ආකාරයෙන්ද? ෆයර්ෆොක්ස් හි හොඳින් පෙනේ. මෙම පිළිතුර පිළිගත් පිළිතුරට වඩා වසර 2 කට පසුව පළ කරන ලද අතර එය IMO ශ්‍රේණිගත කිරීම පැහැදිලි කරයි. ඔබ පැවැත්මක් නැති බව අඩු ලෙස අදහස් කළේ නම්, SQL සේවාදායකයේ මෙම වර්ගයේ මෝඩකම බහුලව දක්නට ලැබේ. උදා: IF OBJECT_ID('TableName','U') IS NULLවස්තු පැවැත්ම DB_ID('foo')පරීක්ෂා කිරීමට හෝ දත්ත සමුදායේ පැවැත්ම පරීක්ෂා කිරීමට භාවිතා කිරීම .
මාටින් ස්මිත්

59
Ar මාටින් ස්මිත් මට විශ්වාසයි ඔහු කියවිය හැකි ප්‍රමාණය අඩු බව. මන්ද ඔබ මෙම මෝඩකම නොදැන සිටියා නම් සහ ඔබට මෙම කේතය වෙනත් අයෙකුගෙන් උරුම වී ඇත්නම්, කේතය කරන්නේ කුමක්දැයි ඔබට වහාම වැටහෙන්නේ නැත. සී ++ 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

ප්‍රශ්න කිරීමට සංස්කරණය සමඟ කටයුතු කිරීමට සංස්කරණය කරන්න : එය ක්‍රියාත්මක විය යුතුය - මෝඩ වැරදි සඳහා ඔබේ කේතය දෙස හොඳින් බලන්න; උදාහරණයක් ලෙස ඔබේ ඇතුළු කිරීම යොදන එකම දත්ත ගබඩාවේම ඔබ INFORMATION_SCHEMA විමසන්නේද? ඔබේ වගුවේ / තීරුවේ නමෙහි යම් ප්‍රකාශයක් තිබේද?


3
වගන්තිය ගැටළුව නිරාකරණය කළ පසු TABLE_SCHEMA = 'mySchema' එකතු කිරීම මම දැන ගතිමි.
මැකීජ්

12
-1: OP ගේ ප්‍රශ්නයට පිළිතුරු සපයන්නේ නැත, නව තීරුවක් එකතු කරන්නේ කෙසේද යන්න පිළිබඳ නව තොරතුරු පමණක් එකතු කරයි.
ANeves

1
+1 පිළිතුරු OP ගේ ප්‍රශ්නයට පරිපූර්ණව අමතර තොරතුරු ප්‍රසාද දීමනාවක් සමඟ OP කෙසේ හෝ ඊළඟට යන්නේ. මේක තමයි මම හොයන්නේ.
බිටර්බ්ලූ

75

මේක උත්සාහ කරන්න...

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
මෙම ක්‍රමය SQL CE සමඟ ද ක්‍රියා කරයි, නමුත් සඳහන් කර ඇති වෙනත් ක්‍රම සමහරක් එසේ නොවේ.
SWalters - මොනිකා

9
;) SELECT 1වෙනුවට ඔබට භාවිතා කළ හැකිය SELECT TOP 1 1.
shA.t

4
ඇතුලත EXISTSප්රකාශයක් SQL ස්වයංක්රීයව (වගේ වන අභාවප්රාප්ත තීරු මනා count(*)) එසේ SELECT *ප්රමාණවත්.
මාක් එල්.

සම්පූර්ණත්වය සඳහා, ඔබ and [TABLE_SCHEMA] = '???'WHERE වගන්තියට එකතු කිරීම සලකා බැලිය යුතුය .
ජෙන්ස්

53

තීරුවේ පැවැත්ම පරීක්ෂා කරන පුද්ගලයින්ට එය අතහැර දැමීමට.

සිට SQL Server 2016 ඔබට නව මිය ප්රකාශ වෙනුවට විශාල භාවිතා කළ හැකි IFදවටන

ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name

47

INFORMATION_SCHEMA.COLUMNSපද්ධති වගු අනුවාද අතර සංරක්ෂණය කිරීමට මයික්‍රොසොෆ්ට් සහතික නොවන නිසා මම පද්ධති වගුවකට වඩා කැමැත්තෙමි . උදාහරණයක් ලෙස, dbo.syscolumnsSQL 2008 හි තවමත් ක්‍රියා කරයි, නමුත් එය අතහැර දමා අනාගතයේ ඕනෑම වේලාවක ඉවත් කළ හැකිය.



5
ඔව්, එය INFORMATION_SCHEMAඅදහස් වලින් සමන්විත වන්නේ ANSI- සම්මත පාර-දත්ත පමණක් බැවින් එය නොකියයි. කෙසේ වෙතත්, පැවැත්ම පරීක්ෂා කිරීම සඳහා එය ප්‍රමාණවත් වේ.
ක්‍රිස්ටියන් හේටර්

3
මයික්‍රොසොෆ්ට් පවසන්නේ "SQL සේවාදායකයේ අනාගත නිකුතුවලදී, තීරු ලැයිස්තුවේ අවසානයට තීරු එකතු කිරීමෙන් මයික්‍රොසොෆ්ට් විසින් ඕනෑම පද්ධති නාමාවලි දර්ශනයක අර්ථ දැක්වීම වැඩි කළ හැකිය. නිෂ්පාදන කේතයේ SELECT * FROM sys.catalog_view_name යන වාක්‍ය ඛණ්ඩය භාවිතා කිරීමට එරෙහිව අපි නිර්දේශ කරමු. ආපසු ලබා දුන් තීරු ඔබගේ යෙදුම වෙනස් කර බිඳ දැමිය හැකිය. එයින් ගම්‍ය වන්නේ ඔවුන් තීරු ඉවත් නොකරන අතර ඔවුන්ගේ අනුපිළිවෙල වෙනස් නොකරන බවයි. එජ් අවස්ථා හැර අන් සියල්ලටම එය පසුගාමී අනුකූලතාව හොඳය.
සර්

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

එය SQL Server 2000 සහ SQL Server 2005 යන දෙවර්ගයේම ක්‍රියාත්මක විය යුතුය. SQL Server 2008 ගැන විශ්වාස නැත, නමුත් එසේ නොවන්නේ මන්දැයි බලන්න.


34

table/ column( id/ name) සංයෝජනය පවතින්නේ දැයි පළමුව පරීක්ෂා කරන්න ( dbo.syscolumnsක්ෂේත්‍ර අර්ථ දැක්වීම් අඩංගු අභ්‍යන්තර SQL සේවාදායක වගුවක්), සහ 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

මගේ හොඳ මිතුරෙකු සහ මගේ සගයකු මට පෙන්වා දුන්නේ ඔබට IFSQL කාර්යයන් සහිත වාරණයක් භාවිතා කළ හැකි ආකාරය OBJECT_IDසහ COLUMNPROPERTYSQL SERVER 2005+ හි තීරුවක් පරීක්ෂා කිරීමට. ඔබට පහත සඳහන් දේට සමාන දෙයක් භාවිතා කළ හැකිය:

ඔබට මෙහි ඔබටම දැක ගත හැකිය

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

මෙය SQL 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

මට SQL SERVER 2000 සඳහා සමානකමක් අවශ්‍ය වූ අතර ich මිච් පෙන්වා දෙන පරිදි මෙය ක්‍රියාත්මක වන්නේ 2005+ inm පමණි.

එය වෙනත් කෙනෙකුට උපකාර කළ යුතු නම්, අවසානයේ මෙය මට වැඩ කළේ:

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
මම හිතන්නේ ඔබ අදහස් කළේ table_schema = 'schema_name' යන්නයි.
ටැබ් ඇලමන්

11

පිළිගත් පිළිතුරේ තාවකාලික වගු අනුවාදය :

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

1
එය පිළිගත් පිළිතුරට වඩා වෙනස් වන්නේ කෙසේද? පිළිගත් පිළිතුරෙහි තාවකාලික වගුවක් ක්‍රියා නොකරන්නේද?
ජෝන් සෝන්ඩර්ස්

1
නිවැරදි. පිළිගත් පිළිතුර තාවකාලික වගු සඳහා ක්‍රියා නොකරයි, මන්ද 'sys.columns' 'tempdb.sys.columns' ලෙස නියම කළ යුතු අතර වගුවේ නම 'tempdb ..' ට පෙර තිබිය යුතුය.
crokusek

10
select distinct object_name(sc.id)
from syscolumns sc,sysobjects so  
where sc.name like '%col_name%' and so.type='U'

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පරිශීලකයා සමඟ සන්නිවේදනය කිරීම සඳහා එය නිර්මාණය කර ඇති බැවින් භාවිතා කිරීමට මම තරයේ නිර්දේශ කරමි . පහත වගු සලකා බලන්න:

 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

සෙවුම් තීරුව වගුවේ තිබේද නැද්ද යන්න පරීක්ෂා කිරීමට පහත විමසුම භාවිතා කළ හැකිය. පහත දැක්වෙන පරිදි, සෙවූ ප්‍රති result ල මත පදනම්ව අපට තීරණයක් ගත හැකිය.

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

table -> ස්ක්‍රිප්ට් වගුව -> නව කවුළු ලෙස - ඔබට නිර්මාණ ස්ක්‍රිප්ට් ඇත. නව කවුළුවල තීරු නම පරීක්ෂා කර සොයා ගන්න


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
IF EXISTS (
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_CATALOG = 'Database Name'
and TABLE_SCHEMA = 'Schema Name'
and TABLE_NAME = 'Table Name'
and COLUMN_NAME = 'Column Name'
and DATA_TYPE = 'Column Type') -- Where statement lines can be deleted.

BEGIN
--COLUMN EXISTS IN TABLE
END

ELSE BEGIN
--COLUMN DOES NOT EXISTS IN TABLE
END

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;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.