কোনও প্রদত্ত টেবিলের সাথে যুক্ত সমস্ত বস্তুকে প্রোগ্রামগতভাবে স্ক্রিপ্ট করার কোনও উপায় আছে কি?


9

আমি জানি যে এসকিউএল পরিচালনার স্টুডিওতে আমি টেবিল / ট্রিগার / কী এবং ডানদিকে ক্লিক করতে পারি 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 "সারণী" আপনাকে বলতে হবে যা বস্তু একে অপরের গায়ে নির্ভরশীল। এটি শ্রেণিবিন্যাসিক, সুতরাং আপনি শূন্যতা পেতে শুরু না করা পর্যন্ত আপনাকে পুনরুক্তরূপে সিসডেপেন্ডস দিয়ে চালাতে হবে। কখনও কখনও, sysd depends অসম্পূর্ণ, এখানে কিছু অন্যান্য পরামর্শ সহ একটি নিবন্ধ আছে

SysObjects "সারণী" আপনি ডাটাবেস মধ্যে উপস্থিত সামগ্রী সম্পর্কে কিছু উপাদান বলে দেবে। প্রকারের (এছাড়াও xtype) কলামগুলি আইটেমটি কী তা আপনাকে জানায়: ব্যবহারকারী-সংজ্ঞায়িত টেবিল, সঞ্চিত প্রকল্প, ট্রিগার ইত্যাদি etc.

তারপরে আপনি sp_helptext একটি সঞ্চিত পদ্ধতির পাঠ্যটি থুথতে চাইবেন । এটি কোনও এনক্রিপ্ট হওয়া সঞ্চিত প্রক্রিয়াটির পাঠ্য পুনরুত্পাদন করবে না।

যে কোনও পূর্ণ এবং সম্পূর্ণ সমাধান প্রোগ্রামিংয়ের সাথে জড়িত থাকবে, বিশেষত যখন এনক্রিপ্ট হওয়া সঞ্চিত প্রক্রিয়া এবং ট্রিগারগুলি এতে জড়িত থাকে। ডিবিতে আইটেমগুলিকে প্রোগ্রামক্রমে নির্ধারণের জন্য একটি নমুনা নিবন্ধ । এসকিউএল সার্ভার 2000 ডিক্রিপ্ট করার জন্য প্রয়োজনীয় ডেটাটাইপটি এসকিউএল সার্ভার 2005-এ প্রদর্শিত হয়েছিল, সুতরাং আপনি এসকিউএল সার্ভার 2000-এ এসকিউএল এর নিজস্ব এনক্রিপ্টযুক্ত সঞ্চয় প্রক্সকে ডিক্রিপ্ট করতে পারবেন না (তবে আপনি এসকিউএল সার্ভার 2005 এ এসকিউএল এ সেগুলি ডিক্রিপ্ট করতে পারবেন) এবং এটি হবে ২০০ surprise থেকে ২০০ 2008 রূপান্তরের ক্ষেত্রে যদি একই হয় তবে আমাকে অবাক করে দেখবেন না। আমি বেশ কয়েক বছর আগে সঞ্চিত পদ্ধতি ডিক্রিপ্ট করার আগ্রহ হারিয়ে ফেলেছি।


5

এটি সার্ভার ম্যানেজমেন্ট অবজেক্টস ব্যবহার করে সি # তে একটি কৌশল - খাঁটি টি-এসকিউএল এটি করার কোনও উপায় আমি জানি না।


আত্মা এই সম্মুখের যোগ, এছাড়াও আপনি powershell2.0 একইভাবে কাজ করতে পারেন
jcolebrand

3

আমি জানি যে কীভাবে আপনার সমস্ত বিষয়গুলির স্ক্রিপ্ট করার জন্য প্রয়োজনীয় সমস্ত তথ্য অগ্রগতিতে সন্ধান করতে হবে। তবে এগুলিকে আসলে স্ক্রিপ্ট করতে আপনাকে নিজেই স্ক্রিপ্ট জেনারেশন কোডটি লিখতে হতে পারে।

আপনি যদি বিদ্যমান অবজেক্টগুলি সম্পর্কে সমস্ত কিছু জানতে কোড লিখছেন তবে গুগলের জন্য শব্দটি হ'ল "এসকিউএল সার্ভার ডেটা অভিধান" Dictionary

আমি আপনাকে কিছু শুরুর উদাহরণ দেব।

নির্দিষ্ট টেবিলে সমস্ত বিদেশী কী বাধা খুঁজে পেতে:

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'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.