2012-01-15 14 views
113

मैं एमएस एसक्यूएल सर्वर के लिए एक क्वेरी लिखना चाहता हूं जो एक तालिका में कॉलम जोड़ता है। लेकिन जब मैं निम्न क्वेरी चलाता/निष्पादित करता हूं, तो मुझे कोई त्रुटि प्रदर्शित नहीं होती है।किसी तालिका में एक कॉलम जोड़ें, यदि यह पहले से मौजूद नहीं है

मैं एक मेज जोड़ने के लिए क्वेरी की इस तरह उपयोग कर रहा हूँ ...

IF EXISTS (
     SELECT * 
     FROM sys.objects 
     WHERE OBJECT_ID = OBJECT_ID(N'[dbo].[Person]') 
       AND TYPE IN (N'U') 
    ) 

लेकिन मैं कैसे एक स्तंभ के लिए इस क्वेरी लिखने के लिए पता नहीं है।

+0

संभावित डुप्लिकेट [कॉलम एक्ज़िस की जांच कैसे करें एसएसएल सर्वर तालिका में टीएस] (http://stackoverflow.com/questions/133031/how-to-check-if-column-exists-in-sql-server-table) –

+0

आपको इसके बजाय 'sys.tables' का उपयोग करना चाहिए "सामान्य" 'sys.objects' - तो आपको स्पष्ट रूप से प्रकार निर्दिष्ट करने की आवश्यकता नहीं है (यह' sys.tables' से पहले से स्पष्ट है ....) –

+0

COL_LENGTH वैकल्पिक केवल SQL-Server 2008 से काम करता है, लेकिन यह काम करता है। –

उत्तर

132

आप sys.columns तालिका io sys.objects का उपयोग कर एक समान निर्माण का उपयोग कर सकते हैं।

IF EXISTS (
    SELECT * 
    FROM sys.columns 
    WHERE object_id = OBJECT_ID(N'[dbo].[Person]') 
     AND name = 'ColumnName' 
) 
+37

ध्यान दें कि इस उदाहरण में आप अपने वास्तविक कोड में EXFSTS का उपयोग नहीं करना चाहते हैं। – Nat

+1

यह एमएस एसक्यूएल 2005 में काम करेगा? – guiomie

+2

अनुकूलित क्वेरी के लिए आप चयन कथन –

28

एक और विकल्प। मैं इस दृष्टिकोण को पसंद करता हूं क्योंकि यह कम लेखन है लेकिन दोनों एक ही चीज़ को पूरा करते हैं।

IF COLUMNPROPERTY(OBJECT_ID('dbo.Person'), 'ColumnName', 'ColumnId') IS NULL 
BEGIN 
    ALTER TABLE Person 
    ADD ColumnName VARCHAR(MAX) NOT NULL 
END 

मैंने यह भी देखा तुम्हारा जहां तालिका में मौजूद है कि के लिए है देख रहा है जाहिर है सिर्फ इस

if COLUMNPROPERTY(OBJECT_ID('dbo.Person'),'ColumnName','ColumnId') is not null 
+9

[या यहां तक ​​कि कम टाइपिंग के लिए] (http://stackoverflow.com/a/5369176/73226) –

+2

मुझे यह पसंद है। मुझे लगता है कि यहां पोस्ट करने का सबसे अच्छा हिस्सा इस तरह के रत्न ढूंढ रहा है। – JStead

45
IF COL_LENGTH('table_name', 'column_name') IS NULL 
BEGIN 
    ALTER TABLE table_name 
    ADD [column_name] INT 
END 
+1

मैंने इसे करने का प्रयास किया लेकिन यह एक त्रुटि देता है जिसमें कहा गया है कि COL_LENGTH फ़ंक्शन मौजूद नहीं है। – ThEpRoGrAmMiNgNoOb

+0

SQL सर्वर 2008+ – Rob

+0

की आवश्यकता है छोटे जोड़े - कॉलम नाम में स्क्वायर ब्रैकेट का उपयोग नहीं करना चाहिए, क्योंकि 'COL_LENGTH ('table_name', '[column_name]') हमेशा SQL Server 2016 (' COL_LENGTH ('[ table_name] ',' column_name ') अपेक्षित के रूप में काम करता है')। –

3

/* सारणी में स्तंभ के अस्तित्व की जाँच करने के लिए */

IF COL_LENGTH('TABLE_NAME','COLUMN_NAME') IS NULL 
BEGIN 
ALTER TABLE .... /*COLUMN DOES NOT EXIST OR CALLER DOES NOT HAVE PERMISSION TO VIEW THE OBJECT*/ 
END 
0
IF NOT EXISTS (SELECT 1 FROM SYS.COLUMNS WHERE 
OBJECT_ID = OBJECT_ID(N'[dbo].[Person]') AND name = 'DateOfBirth') 
BEGIN 
ALTER TABLE [dbo].[Person] ADD DateOfBirth DATETIME 
END 
संबंधित मुद्दे

 संबंधित मुद्दे