পল হোয়াইটের উত্তরের "সাধারণভাবে কোনও বিবৃতি" না দেওয়ার জন্য, আমি আশা করি নিম্নলিখিতটি প্রশ্নের সরাসরি উত্তর দেবে তবে এ জাতীয় প্রক্রিয়াটির পদ্ধতিগত সীমাবদ্ধতা প্রদর্শন করে এবং আপনাকে এমন পদ্ধতি থেকে দূরে সরিয়ে দেয় যেগুলি সহজ ব্যবস্থাপনায় ndণ দেয় না এবং প্রকাশ করতে পারে না ঝুঁকি।
এটা তোলে করতে DDL একই সময় আপনি DML তৈরি করছেন পরিবর্তন না করতে অনেকবার উল্লেখ করা। সমর্থনযোগ্যতা বজায় রাখতে এবং স্প্যাগেটি স্ট্রিংয়ের পরিবর্তনগুলি এড়ানোর জন্য ভাল প্রোগ্রামিং এই ফাংশনগুলিকে পৃথক করে।
এবং পল যেমন সংক্ষেপে নির্দেশ করেছেন, এসকিউএল সার্ভার ব্যাচগুলিতে কাজ করে ।
এখন, যারা এই কাজটির বিষয়ে সন্দেহ করেন তাদের পক্ষে এটি সম্ভবত আপনার উদাহরণে আসে না তবে 2017 এর মতো কিছু সংস্করণ এটি কার্যকরভাবে কাজ করতে পারে! প্রমাণ এখানে:
[পরীক্ষার কোড - এসকিউএল সার্ভারের বহু সংস্করণে কাজ করতে পারে না]
USE master
GO
CREATE TABLE foo (a VARCHAR(11) )
GO
BEGIN TRANSACTION;
INSERT INTO dbo.foo (a)
VALUES ('entry')
/*****
[2] Check Values
*****/
SELECT a FROM dbo.foo
/*****
[3] Add Column
*****/
ALTER TABLE dbo.foo
ADD b VARCHAR(11)
/*****
[3] Insert value into this new column in the same batch
-- Again, this is just an example. Please do not do this in production
*****/
IF EXISTS (SELECT * FROM sys.columns WHERE object_ID('foo') = object_id
AND name = 'b')
INSERT INTO dbo.foo (b)
VALUES ('d')
COMMIT TRANSACTION;
/*****
[4] SELECT outside transaction
-- this will fail
*****/
--IF EXISTS (SELECT * FROM sys.columns WHERE object_ID('foo') = object_id
-- AND name = 'b')
-- SELECT b FROM dbo.foo
-- this will work...but a SELECT * ???
IF EXISTS (SELECT * FROM sys.columns WHERE object_ID('foo') = object_id
AND name = 'b')
SELECT * FROM dbo.foo
DROP TABLE dbo.foo
[উপসংহার]
সুতরাং হ্যাঁ আপনি @AndriyM হিসাবে এসকিউএল সার্ভারের নির্দিষ্ট সংস্করণ বা প্যাচগুলির জন্য একই ব্যাচে ডিডিএল এবং ডিএমএল সম্পাদন করতে পারেন - এসকিউএল 2017 এ ডিবিফিডেল উল্লেখ করেছে, তবে সমস্ত ডিএমএল সমর্থিত নয় এবং এমন কোনও গ্যারান্টি নেই যে এটি সর্বদা ঘটবে। যদি এটি কাজ করে, এটি আপনার এসকিউএল সার্ভারের সংস্করণটির বিপর্যয় হতে পারে এবং আপনি নতুন সংস্করণে প্যাচ বা মাইগ্রেট করার সময় এটি নাটকীয় সমস্যা সৃষ্টি করতে পারে।
- এছাড়াও, সাধারণভাবে আপনার ডিজাইনের পরিবর্তনের প্রত্যাশা করা উচিত। আমি কোনও টেবিলে কলামগুলি সংশোধন / যুক্ত করার উদ্বেগগুলি বুঝতে পারি, তবে আপনি এই চারপাশে সঠিকভাবে নকশা করতে পারেন design
[অতিরিক্ত ক্রেডিট]
পল যেমন বলেছিলেন, যেমন বিদ্যমান উপস্থিতির বক্তব্য, আপনার কোডের পরবর্তী পদক্ষেপে যাওয়ার আগে কোড বৈধ করার জন্য প্রচুর অন্যান্য উপায় রয়েছে।
- উপস্থিতি বিবৃতি আপনাকে কোড তৈরি করতে সহায়তা করতে পারে যা এসকিউএল সার্ভারের সমস্ত সংস্করণে কাজ করে
- এটি একটি বুলিয়ান ফাংশন যা এক বিবৃতিতে জটিল চেকগুলির অনুমতি দেয়