এসকিউএল সার্ভার - আপডেট বিবৃতিতে উইন্ডো ফাংশনগুলির অনুমতি দেওয়া হয় না কেন?


10

নীচের মত একটি আপডেট বিবৃতি চালানোর সময়, আমাকে তা বলতে ত্রুটি পাই

উইন্ডোড ফাংশনগুলি কেবল নির্বাচন বা আদেশের দ্বারা ক্লজগুলিতে উপস্থিত হতে পারে।

UPDATE dbo.Dim_Chart_of_Account
SET Account_Order = LAG([Account_Order]) OVER (ORDER BY [Account_SKey])

আমি জানি যে নীচের মত একটি আপডেটযোগ্য সিটি ব্যবহার করে এটি সহজেই কাজ করা যেতে পারে

 WITH my_cte AS (
     SELECT [Account_Order], LAG([Account_Order]) OVER (ORDER BY [Account_SKey]) AS acc_order_lag
     FROM Dim_Chart_of_Account
)
UPDATE my_cte
SET [Account_Order] = acc_order_lag

আমার প্রশ্ন হ'ল, কোনও আপডেট বিবৃতিতে এটিকে অনুমোদিত না হওয়ার কোনও কারণ রয়েছে কি, আমি কি আপডেটের যোগ্য সিটিটি কার্যতালিকা হিসাবে ব্যবহার করা এড়ানো উচিত?

আমার উদ্বেগটি হ'ল আপডেট স্টেটমেন্ট সহ উইন্ডো ফাংশনগুলি ব্যবহার করার সময় এমন সমস্যা রয়েছে এবং তাই আমি বুঝতে চাই যে এটি কোনও গ্রহণযোগ্য পদ্ধতি নয় বা এড়ানো উচিত।


1
আপডেটযোগ্য সিটিই গ্রহণযোগ্য এবং জরিমানা। কেন আপডেট নেই এটির অনুমতি নেই।
ypercubeᵀᴹ

2
হ্যালোইনের কোনও প্রকার সুরক্ষা?
অ্যারন বারট্র্যান্ড

উত্তর:


5

আপডেটের বিবৃতিগুলিতে উইন্ডো ফাংশনগুলির অনুমতি দেওয়া হয় না কারণ আপডেট বাছাই বা অর্ডার দ্বারা আপডেট করা হয় না।

উইন্ডো ফাংশনগুলি স্কোপড সিলেক্ট স্টেটমেন্টগুলির মতো যা প্রাসঙ্গিক সারিগুলি পুনরায় পরীক্ষা করে এবং পার্টিশন বাই এবং অর্ডার বাই শর্ত প্রয়োগ করে। এছাড়াও, অনেক উইন্ডো ফাংশনগুলির জন্য একটি অর্ডার বাই ক্লজ (ROW_NUMBER, LAG, এবং FIRST_VALUE উদাহরণস্বরূপ) প্রয়োজন।

আপডেটের বিবৃতিগুলি SELECT এর পরিবর্তে SET ব্যবহার করে, সুতরাং একই কোয়েরি স্তরের কোথাও SELECT অনুমোদিত নয়। আপডেটের সাথে উপস্থিত যে কোনও নির্বাচন অবশ্যই একটি সাবকোয়ারিতে থাকতে হবে।

অর্ডার দ্বারাকে অস্বীকার করা কোনও আপডেটের বিবৃতি বিবেচনা করে বিবেচনা করা বোধগম্য হয় যে এটি ক্রমগুলিকে আপডেট করে।

উইন্ডো ফাংশনটি ব্যবহারের জন্য একটি আপডেট পাওয়ার জন্য কোনও সিটিই বা অন্যান্য উপশমটিকে কার্যকারণ হিসাবে ব্যবহার করার কোনও অন্তর্নিহিতা নেই। এটি প্রচলিত অনুশীলন যা ইতজিক বেন-গানের মতো টি-এসকিউএল বিশেষজ্ঞরা সমর্থন করেন। (তাঁর বইয়ের মাইক্রোসফ্ট এসকিউএল সার্ভার ২০১২ পৃষ্ঠার ২৯ পৃষ্ঠা দেখুন, উইন্ডো ফাংশন ব্যবহার করে উচ্চ-পারফরম্যান্স টি-এসকিউএল যেখানে তিনি এই সঠিক দৃশ্যটি আবরণ করেন))

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