2010-05-20 16 views
15

मैं बाहर है कि क्या तालिका एक पहचान स्तंभ है या नहीं लगाना चाहते है या नहीं पहचान करने के लिए। टेबल मेरे लिए अज्ञात है। मैंने टेबल की संरचना नहीं की है। क्वेरी का उपयोग करना?कैसे तालिका पहचान स्तंभ

मैं Sql सर्वर कॉम्पैक्ट संस्करण का उपयोग कर रहा हूँ।

+5

अगर आपको वह जानकारी मिलती है जो आपको चाहिए –

+0

यह भी देखें [आप कैसे निर्धारित करते हैं कि एसक्यूएल टेबल्स के पास प्रोग्राम कॉलम प्रोग्रामेटिक रूप से क्या है] (http://stackoverflow.com/q/87747) –

उत्तर

14

इस क्वेरी जो लौट पहचान स्तंभ नाम है;

create procedure GetIdentity 
@tablename varchar(50) 
begin 
    SELECT OBJECT_NAME(OBJECT_ID) AS TABLENAME, 
      NAME AS COLUMNNAME, 
      SEED_VALUE, 
      INCREMENT_VALUE, 
      LAST_VALUE, 
      IS_NOT_FOR_REPLICATION 
    FROM  SYS.IDENTITY_COLUMNS 
    WHERE OBJECT_NAME(OBJECT_ID) = @tablename 
end 

फिर कोड पक्ष बनाएं।

कॉल इस संग्रहीत प्रक्रिया DataReader भूमिका का उपयोग कर, तो datareader.hasrows() की जाँच करें। यदि स्थिति मान सत्य है (1), तो तालिका सेट होने पर पहचान कॉलम है। यदि नहीं तो उसके पास पहचान कॉलम नहीं है।

+0

कृपया क्या आप इस प्रश्न पर विस्तार कर सकते हैं? धन्यवाद – Shiny

+0

चेक वें उत्तर अब –

3

एक तरह से यह करने के लिए संग्रहीत प्रक्रिया sp_help का उपयोग करना होगा। अर्थात:

sp_help MyTable 

यह एक डेटासेट सभी जानकारी की मेज पर की आवश्यकता होगी है कि वापस आ जाएगी। एक विशिष्ट सारणी है जिसमें पहचानों पर जानकारी है।

यानी:

यह एक पहचान क्षेत्र शामिल नहीं है, पहचान स्तंभ कहेंगे: "कोई पहचान स्तंभ परिभाषित"।

+0

मैं जोड़ूंगा कि आप तालिका के नाम को हाइलाइट कर सकते हैं और फिर एसएसएमएस में इसके लिए शॉर्ट कट के रूप में कीबोर्ड कॉम्बो एएलटी + एफ 1 का उपयोग कर सकते हैं। –

2

@Pranay: वह कॉम्पैक्ट संस्करण कहा। संग्रहीत प्रक्रियाओं का समर्थन नहीं किया जाता है, और कोई sys.anything नहीं है।

इस कॉल है:

SELECT Count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE AUTOINC_INCREMENT IS NOT NULL AND TABLE_NAME='this_table'

यह वापस आ जाएगी या तो 1 (सही) या 0 (गलत)।

+0

मेरे लिए काम नहीं करता है - कोई कॉलम "AUTO_INC_INCREMENT" –

+0

आपके पास अतिरिक्त अंडरस्कोर – Patrick

6

नीचे प्रश्नों का कोई भी अगर एक पहचान कॉलम तालिका

1)

SELECT * 
FROM sys.identity_columns 
WHERE OBJECT_NAME(object_id) = 'TableName' 

2)

SELECT * 
FROM sys.identity_columns 
WHERE object_id = (
     SELECT id 
     FROM sysobjects 
     WHERE name = 'TableName' 
    ) 
9

मैं जानता हूँ कि में मौजूद है की जाँच करने के लिए इस्तेमाल किया जा सकता है यह लंबे समय है पहले लेकिन मुझे यह उपयोगी पाया गया

इसे आजमाएं:

IF EXISTS (SELECT * from syscolumns where id = Object_ID(@TABLE_NAME) and colstat & 1 = 1) 
BEGIN 
    -- Do your things 
END 
1

इस क्वेरी कि यू चयनित डेटाबेस

SELECT 
    sys.columns.name 
    , sys.tables.name 
    , is_identity 
FROM sys.columns 
INNER JOIN sys.tables ON sys.tables.object_id = sys.columns.object_id 
    AND sys.columns.is_identity = 1 
3
IF (OBJECTPROPERTY(OBJECT_ID('TABLE_NAME'), 'TableHasIdentity') = 1) 

ObjectProperty शुरू करने एसक्यूएल सर्वर 2008 संदर्भ उपलब्ध है में सभी tableNames, तालिका के COLUMNNAMES, और is_identity या नहीं मिल: OBJECTPROPERTY

4

मैं सिर्फ यह विकल्प जोड़ना चाहता हूं और मुझे लगता है कि यह सबसे आसान है

SELECT COLUMNPROPERTY(OBJECT_ID('TableName'),'ColumnName','isidentity') 
+0

है जो मैं @johnmcp से सहमत हूं। यह विकल्प वास्तव में सरल है और जब कॉलम पहचान है और 0 कॉलम पहचान पहचान कॉलम नहीं है तो 1 लौटाता है – Rajat