क्या प्रोग्राम को दिए गए टेबल से जुड़े सभी ऑब्जेक्ट को स्क्रिप्ट करने का एक तरीका है?


9

मुझे पता है कि SQL मैनेजमेंट स्टूडियो में मैं टेबल / ट्रिगर / की और राइट क्लिक कर सकता हूं script object as...। क्या किसी वस्तु के नाम को देखते हुए इस प्रोग्राम को करने का कोई तरीका है?

यदि ऐसा है, तो क्या सभी वस्तुओं (प्राथमिक कुंजियों, विदेशी कुंजियों, ट्रिगर्स) को किसी दिए गए तालिका और स्क्रिप्ट से जुड़े सभी प्रोग्राम को खोजने का एक तरीका है?

जवाबों:


5

इसके साथ आरंभ करने का एक तरीका निम्नलिखित होगा:

DECLARE @TableName VARCHAR(50)
DECLARE @ObjectID INT
SET @TableName = '' -- the name of the objects you want to investigate

SELECT @ObjectID = [id]  FROM sysobjects WHERE name=@TableName

SELECT * FROM sysobjects WHERE name=@TableName
UNION
SELECT * FROM sysobjects WHERE id in (SELECT id FROM sysdepends WHERE depid= @ObjectID)

SysDepends "तालिका" आपको बता देंगे जो वस्तुओं एक अन्य पर निर्भर होते हैं। यह पदानुक्रमित है, इसलिए जब तक आप अशक्त होना शुरू नहीं करते हैं, तब तक आपको पुन: SysDepends के माध्यम से चलना पड़ सकता है। कभी-कभी, sysdepend अधूरा है, यहाँ कुछ अन्य सुझावों के साथ एक लेख है

SysObjects "तालिका" आप डेटाबेस में वस्तुओं के बारे में कुछ सामान बता देंगे। प्रकार (यह भी xtype) कॉलम आपको बताता है कि आइटम क्या है: उपयोगकर्ता-परिभाषित तालिका, संग्रहीत खरीद, ट्रिगर, आदि।

तब आप एक संग्रहीत प्रक्रिया के पाठ को बाहर निकालने के लिए sp_helptext चाहते हैं । यह एक एन्क्रिप्टेड संग्रहीत प्रक्रिया के पाठ को पुन: पेश नहीं करेगा।

किसी भी पूर्ण और पूर्ण समाधान में प्रोग्रामिंग कुछ शामिल होगी, खासकर जब एन्क्रिप्टेड संग्रहीत कार्यविधियाँ और ट्रिगर शामिल होते हैं। डीबी में आइटमों को प्रोग्रामेटिक रूप से निर्धारित करने पर एक नमूना लेख । SQL Server 2005 में दिखाए गए प्रॉपर SQL Server 2000 को डिक्रिप्ट करने के लिए आवश्यक डेटाटाइप को SQL Server 2005 में दिखाया गया है, इसलिए आप SQL सर्वर 2000 में SQL का उपयोग अपने एन्क्रिप्टेड स्टोर किए गए प्रॉपर को डिक्रिप्ट करने के लिए नहीं कर सकते हैं (लेकिन आप SQL सर्वर 2005 में उन्हें डीक्रिप्ट कर सकते हैं) और मुझे आश्चर्य नहीं अगर 2005 से 2008 के संक्रमण के लिए वही सच थे। मैंने कई साल पहले संग्रहीत प्रक्रियाओं को डिक्रिप्ट करने में रुचि खो दी।


5

यह सर्वर प्रबंधन ऑब्जेक्ट्स का उपयोग करते हुए C # में एक तकनीक है - मुझे शुद्ध T-SQL में इसे करने का कोई तरीका नहीं पता है।


भावना में इस पर उन्होंने कहा, आप भी powershell2.0 साथ भी ऐसा ही कर सकते हैं
jcolebrand

3

मुझे पता है कि प्रोग्राम को उन सभी सूचनाओं को कैसे खोजना है जो आपको ऑब्जेक्ट्स को स्क्रिप्ट करने की आवश्यकता है। लेकिन वास्तव में उन्हें स्क्रिप्ट करने के लिए, आपको स्क्रिप्ट पीढ़ी कोड को स्वयं लिखना होगा।

यदि आप सभी मौजूदा वस्तुओं के बारे में जानने के लिए कोड लिख रहे हैं, तो Google के लिए शब्द "SQL सर्वर डेटा डिक्शनरी" है।

मैं आपको कुछ शुरुआती उदाहरण देता हूँ।

एक विशिष्ट टेबल पर सभी विदेशी प्रमुख बाधाओं को खोजने के लिए:

select * from information_schema.table_constraints where CONSTRAINT_TYPE = 'FOREIGN KEY'
and TABLE_NAME = 'aspnet_Roles'

एक विशिष्ट तालिका को संदर्भित करने वाले सभी विदेशी कुंजी बाधाओं को खोजने के लिए:

select 
sys.foreign_keys.name as key_name,
pt.name as parent_table_name,
pc.name as parent_column_name,
ct.name as referenced_table_name,
cc.name as referenced_colum_name 
from sys.foreign_key_columns
inner join sys.foreign_keys on sys.foreign_key_columns.constraint_object_id = sys.foreign_keys.object_id
inner join sys.tables pt on sys.foreign_key_columns.parent_object_id = pt.object_id
inner join sys.tables ct on sys.foreign_key_columns.referenced_object_id = ct.object_id
inner join sys.columns pc on sys.foreign_key_columns.parent_object_id = pc.object_id and sys.foreign_key_columns.parent_column_id = pc.column_id
inner join sys.columns cc on sys.foreign_key_columns.referenced_object_id = cc.object_id and sys.foreign_key_columns.referenced_column_id = cc.Column_id
where ct.name = 'aspnet_Applications'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.