2015-04-16 5 views
7

मुझे एमएस एसक्यूएल सर्वर 2012 में एक अजीब समस्या है। मैं यह जांचने की कोशिश कर रहा हूं कि अपग्रेड स्क्रिप्ट में कोई विदेशी कुंजी पहले से मौजूद है या नहीं। मैंने टेबल, विचार और प्रक्रियाओं को खोजने के लिए अतीत में सिस्टम OBJECT_ID() फ़ंक्शन का उपयोग किया है, लेकिन जब मैं इसे विदेशी कुंजी खोजने के लिए उपयोग करने का प्रयास करता हूं तो यह काम नहीं करता है।मुझे OBJECT_ID() फ़ंक्शन का उपयोग करके एक विदेशी कुंजी क्यों नहीं मिल सकती है?

-- This query always returns null 
SELECT OBJECT_ID(N'FK_Name', N'F') 

-- This query works, returning the object ID for the foreign key 
SELECT object_id FROM sys.foreign_keys WHERE name=N'FK_Name' 

This तो जवाब पता चलता है कि मेरी object_id() क्वेरी काम करना चाहिए।

उत्तर

10

वैसे यह हो सकता है कि आपकी विदेशी कुंजी तालिका को देख रही हो, डिफ़ॉल्ट स्कीमा में नहीं (शायद dbo)। इस मामले में आप object_id नहीं देखेंगे जब तक आप स्कीमा, निर्दिष्ट इस तरह: असल में

SELECT OBJECT_ID(N'<schema>.FK_Name', N'F') 

, आप अपने डेटाबेस में एक ही नाम के साथ एक से अधिक ऑब्जेक्ट हो सकता था, लेकिन अलग स्कीमा के भीतर। OBJECT_ID(N'FK_Name', N'F') डिफ़ॉल्ट स्कीमा में ऑब्जेक्ट की आईडी वापस कर देगा।

आप इस तरह यह परीक्षण कर सकते हैं:

create schema test 
create table test.temp1 (id int primary key) 
create table test.temp2 (id int) 
go 

alter table test.temp2 add constraint FK_temp foreign key(id) references test.temp1(id) 

select object_id('FK_temp', 'F') -- returns null 
select object_id('test.FK_temp', 'F') -- returns object id 

drop table test.temp2 
drop table test.temp1 
drop schema test 

sql fiddle demo

+0

FK करता स्कीमा है? –

+0

एफके वस्तुओं से संबंधित है, और वस्तुओं स्कीमा –

+0

से संबंधित है क्या मुझे कुछ याद आया, क्यों -1? –

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

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