จะตรวจสอบว่ามีคอลัมน์อยู่ในตาราง SQL Server ได้อย่างไร


1853

ฉันต้องการเพิ่มคอลัมน์ที่ระบุหากไม่มีอยู่ ฉันมีสิ่งต่อไปนี้ แต่กลับเป็นเท็จเสมอ:

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

ฉันจะตรวจสอบว่ามีคอลัมน์อยู่ในตารางของฐานข้อมูล SQL Server ได้อย่างไร


12
ฉันไม่คิดว่ามีอะไรผิดปกติกับรหัสในคำถาม: ทำงานได้อย่างประณีตสำหรับฉันในปี 2008 R2 (บางทีคุณกำลังรันอยู่ในฐานข้อมูลที่ไม่ถูกต้องหรือไม่บางทีฐานข้อมูลของคุณเป็นกรณี ๆ ไปและคุณไม่มีตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ในสตริง myTableName / myColumnName ของคุณแบบสอบถามแบบนี้ดูเหมือนจะยืดหยุ่นกว่าโซลูชัน COL_LENGTH: ฉันสามารถ เพื่อเรียกใช้กับฐานข้อมูลที่แตกต่างกันและแม้กระทั่งการเชื่อมโยงฐานข้อมูลโดยนำหน้าอย่างเหมาะสม "INFORMATION_SCHEMA" ไม่สามารถดูวิธีการทำกับฟังก์ชั่นเมตาดาต้า
COL_LENGTH

3
@mwardm - COL_LENGTH('AdventureWorks2012.HumanResources.Department ','ModifiedDate')ทำงานได้ดี
Martin Smith

6
คำใบ้ที่เกี่ยวข้องเล็กน้อย: หากคุณต้องการอัปเดตคอลัมน์หลังจากเพิ่มคอลัมน์ (ฉันเชื่อว่าผู้ใช้หลายคนกำลังค้นหาบทความนี้เพื่อจุดประสงค์นั้น) คุณสามารถใช้EXEC sp_executesqlกับUPDATEคำสั่งที่เกิดขึ้นได้
cassandrad

คำตอบที่แท้จริงคือคุณควรเพิ่มฐานข้อมูลที่คุณกำลังตรวจสอบดังนั้นFROM [YourDatabase].INFORMATION_SCHEMA.COLUMNS
Alex Kwitny

คำตอบ:


2054

SQL Server 2005 เป็นต้นไป:

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

เวอร์ชั่นของ Martin Smith สั้นกว่า:

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

ในรุ่นของ Martin Smith สิ่งหนึ่งที่ต้องพูดถึงคือไม่รวมคอลัมน์ชื่อไว้ในวงเล็บเหลี่ยม [] เมื่อ columnName อยู่ในเครื่องหมายวงเล็บสี่เหลี่ยม [] มันจะให้ค่า null แม้ว่าคอลัมน์นั้นจะมีอยู่ในตาราง
Hemendra

@HemendraSinghChauhan - นั่นเป็นเพราะพวกเขาไม่ได้เป็นส่วนหนึ่งของชื่อ คุณจะพบว่าเมื่อเปรียบเทียบกับชื่อในsys.columns
Martin Smith

@MartinSmith ไม่รู้ว่าฉันกำลังใช้คำตอบของคุณและเจอสิ่งนี้ โดยทั่วไปฉันใช้วงเล็บเหลี่ยมระหว่างการเพิ่มคอลัมน์ดังนั้นฉันจึงใช้มันในฟังก์ชัน COL_LENGTH ด้วย รหัสของฉันเป็นเช่นนี้:Alter table Table_Name Add [ColumnName] NVarchar(max) NULL; Select COL_LENGTH('[TABLE_NAME]', '[COLUMN_NAME]')
Hemendra

ใช่ว่าไม่ถูกต้อง ข้อโต้แย้งที่จะCOL_LENGTHต้องไม่ถูกยกมา เป็นไปได้ในทางทฤษฎีสำหรับบางคนในการสร้างคอลัมน์ที่มีชื่อจริง[COLUMN_NAME]เช่นCREATE TABLE #T([[COLUMN_NAME]]] INT); SELECT * FROM #Tจากนั้นจะคลุมเครือหากนี่ไม่ใช่กฎ
Martin Smith

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สามารถอยู่ในรูปแบบชื่อส่วนหนึ่งสองหรือสามส่วนตามต้องการ

ตัวอย่างการอ้างอิงตารางในฐานข้อมูลอื่นคือ

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

ข้อแตกต่างอย่างหนึ่งกับคำตอบนี้เมื่อเทียบกับการใช้มุมมองเมทาดาทาคือฟังก์ชันเมทาดาทาเช่นCOL_LENGTHส่งกลับเฉพาะข้อมูลเกี่ยวกับการเปลี่ยนแปลงที่ทำไว้โดยไม่คำนึงถึงระดับการแยกที่มีผลบังคับใช้


11
นี่สามารถอ่านได้น้อยกว่าคำตอบอื่น ๆ ซึ่งอาจเป็นสาเหตุที่ทำให้ไม่ได้รับการจัดอันดับสูง
Bill Yang

38
@Bill - อ่านน้อยลงในทางใด? ดูดีใน Firefox คำตอบนี้ถูกโพสต์มากกว่า 2 ปีหลังจากคำตอบที่ได้รับการยอมรับซึ่งจะอธิบายการให้คะแนน IMO หากคุณหมายถึงชัดเจนน้อยลงว่ามันมีอยู่ตรวจสอบสำนวนชนิดนี้ค่อนข้างบ่อยใน SQL Server เช่นใช้IF OBJECT_ID('TableName','U') IS NULLเพื่อตรวจสอบการมีอยู่ของวัตถุหรือDB_ID('foo')เพื่อตรวจสอบการมีอยู่ของฐานข้อมูล
Martin Smith

59
@MartinSmith ฉันแน่ใจว่าเขาหมายถึงการอ่านได้น้อยลงเพราะถ้าคุณไม่รู้จักสำนวนนี้และคุณสืบทอดรหัสนี้จากคนอื่นคุณจะไม่เข้าใจทันทีว่าโค้ดทำอะไร ชอบเขียนx>>2แทนที่จะเป็นx/4ใน C ++ รหัส verbose ที่มากขึ้น ( if exists (select column_name from information_schema ...)) ใช้พื้นที่มากขึ้น แต่ไม่มีใครที่จะเกาหัวของพวกเขาพยายามที่จะคิดออกว่ามันทำอะไร
กี

22
นอกจากนี้ยังกระชับกว่านี้คือวิธีแก้ปัญหาที่เร็วกว่า การเข้าถึงINFORMATION_SCHEMAมุมมองหรือความsys.columnsนิยมของดิสก์ในขณะที่COL_LENGTHใช้เมตาดาต้าฐานข้อมูลแคช
wqw

7
นี่อาจไม่ใช่คำตอบที่ได้รับความนิยมสูงที่สุดเนื่องจากได้รับ 2.5 ปีหลังจากอีกข้อหนึ่ง นั่นเป็นเหตุผลที่ฉันตรวจสอบวันที่เสมอเมื่อเปรียบเทียบอันดับกับสองคำตอบ ใช้เวลานานกว่ามากในการเอาชนะคำตอบที่ได้รับเร็วกว่านี้มาก ;)
Sean

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' หลังจากที่ส่วนคำสั่งแก้ไขปัญหา
Maciej

12
-1: ไม่ตอบคำถามของ OP เพียงเพิ่มข้อมูลใหม่เกี่ยวกับวิธีการเพิ่มคอลเล็กชั่นใหม่แม้ OP จะไม่ถามเกี่ยวกับสิ่งนั้น แต่ไม่ได้ตอบความคิดเห็นของ OP
Aneves

1
+1 คำตอบของคำถาม OP อย่างสมบูรณ์แบบพร้อมโบนัสของข้อมูลเพิ่มเติมที่ OP ดำเนินการต่อไป และนี่คือสิ่งที่ฉันกำลังมองหา
Bitterblue

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
วิธีนี้ยังใช้งานได้กับ SQL CE ในขณะที่วิธีอื่นที่กล่าวถึงไม่ได้
SWalters - Reinstate Monica

9
คุณสามารถใช้SELECT 1แทนSELECT TOP 1 1;)
shA.t

4
ภายในEXISTSคำสั่ง SQL จะปรับคอลัมน์ให้เหมาะสมโดยอัตโนมัติ (คล้ายกันcount(*)) ดังนั้นSELECT *จะเพียงพอ
Marc L.

เพื่อความสมบูรณ์คุณควรพิจารณาเพิ่มand [TABLE_SCHEMA] = '???'ไว้ในส่วนคำสั่ง WHERE
Andrew Jens

50

สำหรับคนที่กำลังตรวจสอบการมีอยู่ของคอลัมน์เพื่อวาง

จากSQL Server 2016คุณสามารถใช้คำสั่ง DIE ใหม่แทนคำว่าIFwrapper ขนาดใหญ่

ALTER TABLE Table_name DROP COLUMN IF EXISTS Column_name

47

ฉันต้องการINFORMATION_SCHEMA.COLUMNSมากกว่าตารางระบบเพราะ Microsoft ไม่รับประกันในการเก็บรักษาตารางระบบระหว่างรุ่น ตัวอย่างเช่นdbo.syscolumnsยังคงใช้งานได้ใน SQL 2008 แต่จะเลิกใช้แล้วและสามารถลบออกได้ตลอดเวลาในอนาคต



5
ใช่แล้วมันพูดโดยไม่บอกเนื่องจากINFORMATION_SCHEMAมุมมองมีเมทาดาทามาตรฐาน ANSI เท่านั้น อย่างไรก็ตามนั่นก็เพียงพอแล้วสำหรับการทดสอบการมีอยู่
Christian Hayter

3
Microsoft กล่าวว่า "ในอนาคตของ SQL Server, Microsoft อาจเพิ่มคำจำกัดความของมุมมองแคตตาล็อกระบบโดยการเพิ่มคอลัมน์ในส่วนท้ายของรายการคอลัมน์เราขอแนะนำให้ไม่ใช้ไวยากรณ์ SELECT * FROM sys.catalog_view_name ในรหัสการผลิตเนื่องจากจำนวน คอลัมน์ที่ส่งคืนอาจเปลี่ยนแปลงและทำให้แอปพลิเคชันของคุณพัง " นั่นหมายความว่าพวกเขาจะไม่ลบคอลัมน์หรือเปลี่ยนลำดับ นั่นเป็นความเข้ากันได้ดีพอย้อนหลังสำหรับทุกกรณียกเว้นเคส
siride

42

คุณสามารถใช้มุมมองระบบสคีมาข้อมูลเพื่อค้นหาข้อมูลเกี่ยวกับตารางที่คุณสนใจ:

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

นอกจากนี้คุณยังสามารถสอบถามมุมมองขั้นตอนการจัดเก็บและอะไรก็ได้ที่เกี่ยวกับฐานข้อมูลโดยใช้มุมมอง Information_schema


ตรงนี้เป็นสิ่งที่ใช้ในการตอบแบบสอบถามเขาจำเป็นต้องรู้วิธีเพิ่มคอลัมน์หากไม่มีอยู่
Birel

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 Server ภายในที่มีคำจำกัดความของเขตข้อมูล) หรือไม่และหากไม่มีการ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บล็อกที่มีฟังก์ชั่น SQL OBJECT_IDและCOLUMNPROPERTYใน SQL 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เท่านั้น
Ruud Helderman

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 และเป็น @Mitch ชี้ให้เห็นนี้ใช้งานได้เพียง inm 2005+

มันควรช่วยคนอื่นไหมนี่คือสิ่งที่ใช้ได้ผลกับฉันในตอนท้าย:

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

15
if exists (
  select * 
  from INFORMATION_SCHEMA.COLUMNS 
  where TABLE_NAME = '<table_name>' 
  and COLUMN_NAME = '<column_name>'
) begin
  print 'Column you have specified exists'
end else begin
  print 'Column does not exist'
end

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'
Tab Alleman

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


8

คำตอบของ Wheat คือดี แต่สมมติว่าคุณไม่มีคู่ชื่อตาราง / คอลัมน์ชื่อที่เหมือนกันใน schema หรือฐานข้อมูลใด ๆ เพื่อให้ปลอดภัยสำหรับเงื่อนไขนั้นให้ใช้สิ่งนี้ ...

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เพราะเมื่อมีอยู่จะใช้มันไม่ได้โดดเลือกทุกแถวและคอลัมน์ทั้งหมดภายในมันเป็นเพียงแค่การตรวจสอบสำหรับการดำรงอยู่และไม่จริงการตรวจสอบสำหรับทุกแถวและคอลัมน์
Pawan Nogariya

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

หวังว่ามันจะช่วย Simone


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;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.