2009-10-05 10 views
8

मैंने अपने स्थानीय डेटाबेस पर कई टेबल बनाए हैं और उन्हें उत्पादन डेटाबेस में स्थानांतरित कर दिया है।सभी तालिका बाधाओं की प्रतिलिपि बनाने के लिए टी-एसक्यूएल स्क्रिप्ट

अब मैं ठीक ट्यूनिंग पर डेटाबेस काम कर रहा हूँ और इस तरह के पी, FK, डिफ़ॉल्ट मान, के रूप में अपने स्थानीय डेटाबेस तालिकाओं पर कई बाधाओं बनाया इंडेक्स आदि आदि

अब मैं केवल करने के लिए इन बाधाओं को कॉपी करना चाहते हैं उत्पादन डेटाबेस। क्या इसे करने का कोई तरीका है?

कृपया ध्यान दें कि मेरे उत्पादन डेटाबेस टेबल पहले से ही कुछ डेटा के साथ आबादी में हैं। इसलिए मैं उन्हें छोड़ और फिर से नहीं बना सकता।

उत्तर

2

रेड गेट का SQL Compare ऐसा करने के लिए एक लोकप्रिय, गैर-मुक्त तरीका है।

3

आपके सभी डीडीएल कोड को स्रोत नियंत्रण में संग्रहीत करने का सबसे अच्छा तरीका होगा। फिर dbGhost (मेरा पसंदीदा) या SQL Compare

+0

मैंने 10 वर्षों तक डीबीजीहोस्ट का उपयोग किया है और यह मुझे कभी भी नीचे जाने नहीं देता है, मैं बिना मध्यम पैमाने पर एसक्यूएल विकास का प्रयास नहीं करता। – penderi

+0

एक और विकल्प जिसे मैंने लंबे समय तक उपयोग किया है वह AdeptSQL डिफ है। मुफ़्त नहीं है लेकिन यह स्कीमा और डेटा तुलना करता है, बहुत तेज़ है, और अद्यतन स्क्रिप्ट उत्पन्न कर सकता है और उसे एप्लिकेशन के भीतर से चला सकता है। हालांकि संस्करण नियंत्रण के तहत अपनी स्क्रिप्ट प्राप्त करना भी महत्वपूर्ण है। – DarinH

16

जैसे टूल का उपयोग करके इसे उत्पादन में तैनात करें यदि आप कोई उपकरण नहीं खरीदना चाहते हैं (जो कि उनकी कीमत पूरी तरह से मूल्यवान हैं, बीटीडब्ल्यू), तो आप हमेशा सिस्टम कैटलॉग दृश्यों से पूछताछ कर सकते हैं, और स्क्रिप्ट बनाने के लिए वहां से जानकारी निकालें जो आप अपने नए डेटाबेस पर निष्पादित कर सकते हैं।

उदाहरण के मामले में डिफ़ॉल्ट की कमी, इस क्वेरी आप अपने डेटाबेस में सभी डिफ़ॉल्ट की कमी की एक सूची दिखाता:

SELECT 
    dc.name 'Constraint Name', 
    OBJECT_NAME(parent_object_id) 'Table Name', 
    c.name 'Column Name', 
    definition 
FROM 
    sys.default_constraints dc 
INNER JOIN 
    sys.columns c ON dc.parent_object_id = c.object_id 
        AND dc.parent_column_id = c.column_id 
ORDER BY 
    OBJECT_NAME(parent_object_id), c.name 

और उस आधार पर, आप निश्चित रूप से एक प्रश्न जो टी SQL कथन फेंकना उन डिफ़ॉल्ट की कमी से बनाना होगा बना सकते हैं अपने लक्ष्य सर्वर पर:

SELECT 
    'ALTER TABLE ' + OBJECT_SCHEMA_NAME(dc.parent_object_id) + '.' + OBJECT_NAME(dc.parent_object_id) + 
    ' ADD CONSTRAINT ' + dc.name + ' DEFAULT(' + definition 
    + ') FOR ' + c.name 
FROM 
    sys.default_constraints dc 
INNER JOIN 
    sys.columns c ON dc.parent_object_id = c.object_id 
        AND dc.parent_column_id = c.column_id 

आप (AdventureWorks नमूना DB के लिए) कुछ इस तरह मिल चाहते हैं:

ALTER TABLE dbo.Store ADD CONSTRAINT DF_Store_rowguid DEFAULT((newid())) FOR rowguid 
ALTER TABLE dbo.Store ADD CONSTRAINT DF_Store_ModifiedDate DEFAULT((getdate())) FOR ModifiedDate 
ALTER TABLE dbo.ProductPhoto ADD CONSTRAINT DF_ProductPhoto_ModifiedDate DEFAULT((getdate())) FOR ModifiedDate 
ALTER TABLE dbo.ProductProductPhoto ADD CONSTRAINT DF_ProductProductPhoto_Primary DEFAULT(((0))) FOR Primary 
ALTER TABLE dbo.ProductProductPhoto ADD CONSTRAINT DF_ProductProductPhoto_ModifiedDate DEFAULT((getdate())) FOR ModifiedDate 
ALTER TABLE dbo.StoreContact ADD CONSTRAINT DF_StoreContact_rowguid DEFAULT((newid())) FOR rowguid 
ALTER TABLE dbo.StoreContact ADD CONSTRAINT DF_StoreContact_ModifiedDate DEFAULT((getdate())) FOR ModifiedDate 
ALTER TABLE dbo.Address ADD CONSTRAINT DF_Address_rowguid DEFAULT((newid())) FOR rowguid 
बेशक

, आप टी सकता है परिणामस्वरूप टी-एसक्यूएल आपकी पसंद के आउटपुट के रूप में कमजोर हो रहा है - लेकिन मूल रूप से, & उन परिणामों को क्वेरी से अपने नए डेटाबेस में पेस्ट करें, और आप बाहर जाएं।

बेशक, विदेशी कुंजी संबंधों (sys.foreign_keys) के लिए समान सिस्टम कैटलॉग दृश्य हैं, बाधाओं की जांच करें (sys.check_constraints), अनुक्रमणिका (sys.indexes और sys.index_columns) और कई अन्य।

यह थोड़ा सा काम है - लेकिन यह आपके समय पर किया जा सकता है, और आप प्रक्रिया में SQL सर्वर के बारे में बहुत कुछ सीखेंगे।

तो यह एक पारंपरिक निर्णय को फिर से "बनाने या खरीदने" :-)

मार्क

0

कोशिश DBSourceTools। http://dbsourcetools.codeplex.com
इसमें स्कीमा फ़ंक्शन की तुलना है जो आपको एक अपडेट स्क्रिप्ट बनाने में मदद करेगी।
हालांकि ध्यान रखें कि आपको अपने पूरे डेटाबेस पर स्रोत-कोड नियंत्रण का उपयोग करना चाहिए।
डीबीएसओर्सटूल को ऐसा करने के लिए डिज़ाइन किया गया था - डेवलपर्स को अपने डेटाबेस को स्रोत नियंत्रण में लाने में सहायता करें।

1

निश्चित रूप से यह एक पुरानी पोस्ट है, लेकिन उपर्युक्त उत्तरों में से किसी भी स्क्रिप्ट में तालिका स्कीमा भी शामिल नहीं हैं। तो यह मेरे डेटाबेस के लिए बॉक्स काम नहीं किया।

यह एक करता है, तो यह किया:

-- =========================================================== 
-- Default Constraints 
-- How to script out Default Constraints in SQL Server 2005+ 
-- =========================================================== 

-- view results in text, to make copying and pasting easier 
-- drop default constraints 
SELECT 
    'ALTER TABLE ' + 
    QuoteName(OBJECT_SCHEMA_NAME(sc.id)) + '.' + QUOTENAME(OBJECT_NAME(sc.id)) + 
    CHAR(10) + 
    ' DROP CONSTRAINT ' + 
    QuoteName(OBJECT_NAME(sc.cdefault)) 
FROM 
    syscolumns sc 
    INNER JOIN 
    sysobjects as so on sc.cdefault = so.id 
    INNER JOIN 
    syscomments as sm on sc.cdefault = sm.id 
WHERE 
    OBJECTPROPERTY(so.id, N'IsDefaultCnst') = 1 

-- create default constraints 
SELECT 
    'ALTER TABLE ' + 
    QuoteName(OBJECT_SCHEMA_NAME(sc.id)) + '.' + QuoteName(OBJECT_NAME(sc.id)) + 
    ' ADD CONSTRAINT ' + 
    QuoteName(OBJECT_NAME(sc.cdefault))+ 
    ' DEFAULT ' + 
    sm.text + 
    ' FOR ' + QuoteName(sc.name) 
    + CHAR(13)+CHAR(10) 
FROM 
    syscolumns sc 
    INNER JOIN 
    sysobjects as so on sc.cdefault = so.id 
    INNER JOIN 
    syscomments as sm on sc.cdefault = sm.id 
WHERE 
    OBJECTPROPERTY(so.id, N'IsDefaultCnst') = 1 

मैं Donabel सैंटोस के blog here से अनुकूलित।

संपादित और एनबी: अपने डिफ़ॉल्ट की कमी छोड़ने से पहले क्वेरी के दोनों भागों चलाने के लिए और दूसरा परिणाम सेट (यानी ADD CONSTRAINT रों) बचाने के लिए सुनिश्चित, और आप उन्हें फिर से बनाने के लिए सक्षम नहीं होगा दोबारा (नहीं मैंने ऐसा नहीं किया :)

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

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