নিখুঁতভাবে টি-এসকিউএলে বিদ্যমান সারণী থেকে একটি স্ক্রিপ্ট তৈরি করার কোনও উপায় রয়েছে (এটি এসএমও ব্যবহার ছাড়াই হয়, যেহেতু টি-এসকিউএল এসএমও ব্যবহার করে না)। আসুন একটি সঞ্চিত প্রক্রিয়া বলুন যা একটি সারণির নাম গ্রহণ করে এবং একটি স্ট্রিং প্রদান করে যা প্রদত্ত টেবিলের জন্য তৈরি স্ক্রিপ্ট রয়েছে?
এখন আমি যে পরিস্থিতিটির মুখোমুখি হচ্ছি তার বর্ণনা দিন, কারণ এর কাছে যাওয়ার জন্য আলাদা উপায় থাকতে পারে। বেশ কয়েকটি ডজন ডাটাবেস সহ আমার একটি উদাহরণ আছে। এই ডাটাবেসগুলির সকলের একই স্কিমা, সমস্ত একই টেবিল, সূচক এবং অন্যান্য। তারা একটি তৃতীয় পক্ষের সফ্টওয়্যার ইনস্টলেশন অংশ হিসাবে তৈরি করা হয়েছিল। তাদের সাথে কাজ করার জন্য আমার একটি উপায় থাকা দরকার যাতে আমি তাদের কাছ থেকে বিজ্ঞাপনের পদ্ধতিতে ডেটা সংগ্রহ করতে পারি। Dba.se এ ভাল লোকেরা ইতিমধ্যে আমাকে এখানে সহায়তা করেছে কীভাবে একটি আলাদা ডাটাবেসে ট্রিগার তৈরি করবেন?
বর্তমানে আমাকে সমস্ত ডাটাবেস জুড়ে একটি সারণী থেকে একটি নির্বাচন করার উপায় খুঁজে বের করতে হবে। আমি ডাকা একটি টেবিলের মধ্যে সমস্ত ডাটাবেস নাম রেকর্ড করেছি Databasees
এবং আমি তাদের সকলের উপর একটি নির্বাচিত বিবৃতি কার্যকর করতে নিম্নলিখিত স্ক্রিপ্ট লিখেছি:
IF OBJECT_ID('tempdb..#tmp') IS NOT NULL
DROP TABLE #tmp
select * into #tmp from Database1.dbo.Table1 where 1=0
DECLARE @statement nvarchar(max) =
N'insert into #tmp select * from Table1 where Column1=0 and Cloumn2 =1'
DECLARE @LastDatabaseID INT
SET @LastDatabaseID = 0
DECLARE @DatabaseNameToHandle varchar(60)
DECLARE @DatabaseIDToHandle int
SELECT TOP 1 @DatabaseNameToHandle = Name,
@DatabaseIDToHandle = Database_Ref_No
FROM Databasees
WHERE Database_Ref_No > @LastDatabaseID
ORDER BY Database_Ref_No
WHILE @DatabaseIDToHandle IS NOT NULL
BEGIN
DECLARE @sql NVARCHAR(MAX) = QUOTENAME(@DatabaseNameToHandle) + '.dbo.sp_executesql'
EXEC @sql @statement
SET @LastDatabaseID = @DatabaseIDToHandle
SET @DatabaseIDToHandle = NULL
SELECT TOP 1 @DatabaseNameToHandle = Name,
@DatabaseIDToHandle = Database_Ref_No
FROM Databasees
WHERE Database_Ref_No > @LastDatabaseID
ORDER BY Database_Ref_No
END
select * from #tmp
DROP TABLE #tmp
তবে উপরের স্ক্রিপ্টটি নিম্নলিখিত বার্তায় ব্যর্থ হয়েছে:
সারণি '# টিএমপি'-তে পরিচয় কলামের জন্য একটি স্পষ্ট মান কেবল তখনই নির্দিষ্ট করা যেতে পারে যখন কোনও কলাম তালিকা ব্যবহার করা হয় এবং IDENTITY_INSERT চালু থাকে।
এটি যুক্ত করা হচ্ছে:
SET IDENTITY_INSERT #tmp ON
সাহায্য করে না, যেহেতু, আমি কলাম তালিকাটি নির্দিষ্ট করতে এবং এটি জেনেরিক রাখতে পারি না।
এসকিউএল-তে কোনও প্রদত্ত টেবিল বন্ধ করে পরিচয় স্যুইচ করার কোনও উপায় নেই। আপনি কেবল একটি কলাম ছেড়ে দিতে পারেন এবং একটি কলাম যুক্ত করতে পারেন, এটি অবশ্যই কলামের ক্রম পরিবর্তন করে। এবং যদি কলামের ক্রম পরিবর্তন হয়, আপনাকে আবারও কলামের তালিকাটি নির্দিষ্ট করতে হবে, আপনি যে টেবিলটি জিজ্ঞাসা করছেন তার উপর নির্ভর করে এটি আলাদা হবে।
সুতরাং আমি ভেবেছিলাম যে আমি যদি আমার টি-এসকিউএল কোডে তৈরি টেবিল স্ক্রিপ্টটি পেতে পারি, আমি সনাক্তকরণ কলামটি সরাতে স্ট্রিং ম্যানিপুলেশন এক্সপ্রেশন দিয়ে এটিকে চালিত করতে পারি এবং ফলাফল সেটে ডাটাবেস নামের জন্য একটি কলাম যুক্ত করতে পারি।
আমি চাই তা অর্জনের জন্য কি কেউ তুলনামূলক সহজ উপায় সম্পর্কে ভাবতে পারে?