मैं एक जावा डेवलपर हूं जो एक डीबीए के बिना एक टीम पर प्राप्त करने के लिए हुआ है और जहां एक डेवलपर के रूप में, मुझे डीबीए अधिकार नहीं मिल सकता है। मुझे दो डेटाबेस के बीच पूरे स्कीमा को ले जाने का काम सौंपा गया था, इसलिए बिना डीबीए के, मुझे इसे करना पड़ा और स्क्रिप्ट चलाकर, SQL Server 2008 में GUI का उपयोग करने में सक्षम नहीं होने के कारण, क्योंकि मेरे पास व्यवस्थापक विशेषाधिकार नहीं थे।
सब कुछ समस्या के बिना स्थानांतरित कर दिया गया था, हालांकि, जब नए स्कीमा पर संग्रहित प्रक्रिया चल रही थी। तो, मैंने पाया कि मैंने एक तालिका में पहचान क्षेत्र खो दिया है। मैंने तालिका बनाने वाली स्क्रिप्ट को दोबारा जांचा और यह वहाँ था, हालाँकि, जब मैंने स्क्रिप्ट चलाई तो SQL सर्वर को यह नहीं मिला। मुझे बाद में एक डीबीए द्वारा बताया गया कि उसने पहले भी यही समस्या देखी थी।
किसी भी स्थिति में, SQL Server 2008 के लिए, ये ऐसे चरण हैं जो मैंने इसे हल करने के लिए उठाए हैं और उन्होंने काम किया है, इसलिए मैं इसे यहाँ पोस्ट कर रहा हूँ इस उम्मीद में कि यह किसी के लिए मददगार होगा। यह वही है जो मैंने किया था क्योंकि मेरे पास एक और मेज पर एफके निर्भरता थी जिसने इसे और अधिक कठिन बना दिया था:
पहचान को सत्यापित करने और तालिका पर निर्भरता देखने के लिए मैंने इस क्वेरी का उपयोग किया था।
1.) एक मेज पर आँकड़े खोजें:
exec sp_help 'dbo.table_name_old';
2.) पीके क्षेत्र पर एक पहचान फ़ील्ड को जोड़ने के लिए एक डुप्लिकेट, समान नई तालिका बनाएं, जहां वह पहले था।
3.) डेटा ले जाने के लिए पहचान को अक्षम करें।
SET IDENTITY_INSERT dbo.table_name ON
4.) डेटा ट्रांसफर करें।
INSERT INTO dbo.table_name_new
(
field1, field2, etc...
)
SELECT
field1, field2, etc...
FROM
dbo.table_name_old;
5.) सत्यापित करें कि डेटा है।
SELECT * FROM dbo.table_name_new
6.) पहचान को फिर से सक्षम करें।
SET IDENTITY_INSERT ToyRecP.ToyAwards.lkpFile_New OFF
7.) यह सबसे अच्छी स्क्रिप्ट है जिसे मैंने सभी एफके रिश्तों को सत्यापित करने के लिए पाया कि कौन सी तालिका (एस) पर निर्भरता के रूप में मूल तालिका का संदर्भ है और मैं कई में आया हूं, इसलिए यह एक रक्षक है!
SELECT f.name AS ForeignKey,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc
ON f.OBJECT_ID = fc.constraint_object_id
ORDER BY ReferenceTableName;
8.) सुनिश्चित करें कि आपके पास अगले चरण से पहले सभी पीके और एफके लिपियों को शामिल करना है।
9.) आप SQL सर्वर 2008 का उपयोग करके प्रत्येक कुंजी और स्क्रिप्ट पर राइट-क्लिक कर सकते हैं
10.) इस सिंटैक्स का उपयोग करते हुए निर्भरता तालिका (ओं) से FK (ओं) को छोड़ें:
ALTER TABLE [dbo].[table_name] DROP CONSTRAINT [Name_of_FK]
11.) मूल तालिका छोड़ें:
DROP TABLE dbo.table_name_old;
13.) ये अगले चरण चरण 9 में SQL Server 2008 में आपके द्वारा बनाई गई स्क्रिप्ट पर निर्भर करते हैं।
- नई तालिका में पीके जोड़ें।
- नई तालिका में FK जोड़ें।
- निर्भरता तालिका में FK की पीठ जोड़ें।
14.) सत्यापित करें कि सब कुछ सही और पूर्ण है। मैंने तालिकाओं को देखने के लिए GUI का उपयोग किया।
15.) मूल तालिकाओं के नाम पर नई तालिका का नाम बदलें।
exec sp_RENAME '[Schema_Name.OldTableName]' , '[NewTableName]';
अंत में, सब कुछ काम किया!