প্লেইন অ্যাডো ব্যবহার করে কোনও এসকিউএল সার্ভার থেকে ভিউ সংজ্ঞাটি পুনরুদ্ধার করার কোনও উপায় আছে কি?


91

আমি এসকিউএল সার্ভারে হোস্ট করা ডেটাবেসগুলি থেকে এডিও সংযোগ OpenSchema()কলটি বিভিন্ন অবতারে সফলভাবে কলাম সংজ্ঞাগুলি সরিয়ে ফেলছি যাতে আমি প্রোগ্রামটিমে এই এসএমএল ডাটাবেসে সেই টেবিলগুলি পুনরায় তৈরি করতে পারি। এ পর্যন্ত সব ঠিকই.

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

আমি ADOX ক্যাটালগ ভিউগুলি ব্যবহার করে ভিউটি তৈরি করতে ব্যবহৃত এসকিউএল কমান্ডটি অ্যাক্সেস করার চেষ্টা করেছি, তবে দেখা যাচ্ছে যে এসকিউএল সার্ভারের জন্য আমরা ওএলইডিডি ড্রাইভারটি ব্যবহার করছি যা এই কার্যকারিতা সমর্থন করে না।

এডিওর মাধ্যমে ভিউ কনফিগারেশনের জন্য এই তথ্যটি পাওয়ার কোনও উপায় আছে কি না এমনভাবে যে "কলম্বএক্সে টেবিল জেডে কলামওয়ানে মানচিত্র রয়েছে" বা ভিউ তৈরি করতে ব্যবহৃত আসল এসকিউএল কমান্ড আকারে রয়েছে?

উত্তর:


166

এসকিউএল সার্ভারের কোন সংস্করণ?

এসকিউএল সার্ভার 2005 এবং তার পরে, আপনি এই জাতীয় মতামত তৈরি করতে ব্যবহৃত এসকিউএল স্ক্রিপ্টটি পেতে পারেন:

select definition
from sys.objects     o
join sys.sql_modules m on m.object_id = o.object_id
where o.object_id = object_id( 'dbo.MyView')
  and o.type      = 'V'

এটি ভিউ তৈরি / পরিবর্তন করতে ব্যবহৃত স্ক্রিপ্টযুক্ত একক সারি প্রদান করে।

সারণীর অন্যান্য কলামগুলি ভিউ সংকলন করার সময় স্থানটিতে বিকল্পগুলির বিষয়ে জানায়।

গুহা

  • যদি সর্বশেষে ভিউয়ারটি ALTER VIEW দিয়ে সংশোধন করা হয়, তবে স্ক্রিপ্টটি একটি ক্রিয়েট ভিউ স্টেটমেন্টের পরিবর্তে একটি ALTER VIEW স্টেটমেন্ট হবে।

  • স্ক্রিপ্টটি নামটি তৈরি করার সাথে সাথে প্রতিফলিত করে। এটি পরিবর্তিত হওয়ার একমাত্র সময় হ'ল আপনি যদি ALTER VIEW কার্যকর করেন বা ড্রপ করে ক্রিয়েট ভিউ দিয়ে ভিউটি পুনরায় তৈরি করেন। যদি ভিউটির নাম পরিবর্তন করা হয়েছে (উদাহরণস্বরূপ, এর মাধ্যমে sp_rename) বা মালিকানাটি অন্য কোনও স্কিমাতে স্থানান্তরিত করা হয়েছে, আপনি যে স্ক্রিপ্টটি ফিরে পেয়েছেন তা মূল CREATE / ALTER VIEW বিবৃতি প্রতিফলিত করবে: এটি বস্তুর বর্তমান নামটি প্রতিফলিত করবে না।

  • কিছু সরঞ্জাম আউটপুট কেটে দেয়। উদাহরণস্বরূপ, এমএস-এসকিউএল কমান্ড লাইন সরঞ্জাম sqlcmd.exe 255 অক্ষরে ডেটা কেটে দেয়। অক্ষরের -y Nসাথে ফলাফল পেতে আপনি প্যারামিটারটি পাস করতে পারেন N


8
উত্তর থেকে এসকিউএল কোয়েরিটি কিছুটা সহজ করা যায়:select m.definition from sys.sql_modules m where m.object_id = object_id('dbo.MyView', 'V')
ইভান

9
অন্য একটি সতর্কতাই হ'ল সংজ্ঞাটি দেখতে সক্ষম হওয়ার জন্য আপনার সম্ভবত সঠিক অনুমতি দরকার। আমি তাদের জন্য NULL পাচ্ছি।
ছড়িয়ে পড়ে 21

4
@ স্ক্ল্যামার, আপনি যা দেখছেন তা যদি প্রথম 255 টি অক্ষর হয় তবে আপনি ফলাফল কলামটি ভুলভাবে রূপান্তর করছেন। sys.sql_modulesকলামটি এইভাবে সংজ্ঞায়িত করার জন্য স্কিমা :definition nvarchar(max) SQL text that defines this module. NULL = Encrypted.
নিকোলাস কেরি

4
@ স্ক্ল্যামার, আপনি আরও খেয়াল করতে পারেন যে আপনি যদি এসএসএমএস / ক্যোয়ারী অ্যানালাইজার ব্যবহার করছেন, যদি আপনি ডিফল্টরূপে পাঠ্য (গ্রিডের পরিবর্তে) ফলাফল হিসাবে বেরিয়ে আসছেন তবে [n][var]charডেটা 256 টি অক্ষরে কাটা হয়। আপনি Query..Query Options...& mdash এ মেনুতে এটি পরিবর্তন করতে পারেন ; আসন্ন মডেল ডায়ালগ থেকে Results>Textবাম দিকে গাছের নিয়ন্ত্রণের নোডে ড্রিল করুন।
নিকোলাস কেরি

4
আমি এমএস-এসকিউএল কমান্ড লাইন সরঞ্জাম (sqlcmd.exe) ব্যবহার করি। এটি ডেটাও কেটে দেয়। আরও ডেটা (সত্যই এমএস?) পেতে আমাকে -y প্যারামিটারটি পাস করতে হয়েছিল। আমাকে সঠিক দিক নির্দেশ করার জন্য ধন্যবাদ।
স্ক্লামার

24

মাইক্রোসফট ভিউ সংজ্ঞা পাবার জন্য তালিকাভুক্ত নিম্নলিখিত পদ্ধতি: http://technet.microsoft.com/en-us/library/ms175067.aspx


USE AdventureWorks2012;
GO
SELECT definition, uses_ansi_nulls, uses_quoted_identifier, is_schema_bound
FROM sys.sql_modules
WHERE object_id = OBJECT_ID('HumanResources.vEmployee'); 
GO

USE AdventureWorks2012; 
GO
SELECT OBJECT_DEFINITION (OBJECT_ID('HumanResources.vEmployee')) 
AS ObjectDefinition; 
GO

EXEC sp_helptext 'HumanResources.vEmployee';

12

এসকিউএল 2000 এর ব্যবহারকারীদের জন্য, এই তথ্যটি সরবরাহ করবে প্রকৃত আদেশটি হ'ল:

select c.text
from sysobjects     o
join syscomments    c on c.id = o.id
where o.name = '<view_name_here>'
  and o.type      = 'V'

এই সংস্করণটি 4,000 টি অক্ষরের একাধিক রেকর্ডে ভিউটি ভাঙ্গা দেয়। (এসকিউএল সার্ভার ২০১৪ সালে পরীক্ষিত))
বেন


3

আপনি নীচের ক্যোয়ারির মাধ্যমে টেবিল / বিশদ বিবরণ পেতে পারেন।

: টেবিলের জন্য sp_help TABLE_NAME দেখার জন্য: sp_help VIEW_NAME



0

এই উদাহরণ: ভিউ সংগ্রহ, কমান্ডটেক্সট সম্পত্তি উদাহরণ (ভিবি) ভিউয়ের সাথে সম্পর্কিত COMMAND পরিবর্তন করে ভিউগুলি বজায় রাখতে ADOX কীভাবে ব্যবহার করবেন তা দেখায়। পরিবর্তে এটি এর মতো ব্যবহার করুন:

 Set cmd = cat.Views("AllCustomers").Command  

' Update the CommandText of the command.  
cmd.CommandText = _  
"Select CustomerId, CompanyName, ContactName From Customers"  

শুধু এইভাবে ব্যবহার করার চেষ্টা করুন:

Set CommandText = cat.Views("AllCustomers").Command.CommandText
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.