मुझे यकीन नहीं था कि आप वास्तव में एक अद्यतन क्वेरी या एक चुनिंदा क्वेरी चाहते हैं। निम्नलिखित क्वेरी आपकी शर्तों के अधीन प्रत्येक आदेश के लिए एक नया ऑपरेटर लौटाती है:
/*
with orders as (select 1 as orderId, 'order1' as orderDesc, 1 as OperatorId),
operators as (select 1 as operatorID, 'John' as name)
*/
select o.*, op.name as NewOperator, op.operatorID as NewOperatorId
from (select o.*, (ROW_NUMBER() over (order by newid()) % numoperators) + 1 as randseqnum
from Orders o cross join
(select COUNT(*) as numoperators from operators) op
) o join
(select op.*, ROW_NUMBER() over (order by newid()) as seqnum
from Operators op
) op
on o.randseqnum = op.seqnum order by orderid
यह मूल रूप से शामिल होने के लिए पंक्तियों में एक नई आईडी असाइन करता है। क्रम तालिका को यादृच्छिक रूप से असाइन किए गए 1 और ऑपरेटरों की संख्या के बीच एक मान मिलता है। इसके बाद इसे ऑपरेटरों पर एक क्रम संख्या से जोड़ा जाता है।
अगर आपको अपडेट करने की जरूरत है, तो आप कुछ ऐसा कर सकते हैं:
with toupdate as (<above query>)
update orders
set operatorid = newoperatorid
from toupdate
where toupdate.orderid = orders.orderid
आपके दो प्रश्न:
क्या पहले सभी ऑर्डर और सभी ऑपरेटरों को चुनना बेहतर होगा जो अस्थायी तालिका में शर्तों को पूरा करते हैं और फिर फेरबदल करते हैं या यह सब एक बड़ी क्वेरी में करते हैं?
अस्थायी तालिकाओं का उपयोगकर्ता अनुप्रयोग के लिए प्रदर्शन और आवश्यकताओं का मामला है। यदि डेटा तेजी से अद्यतन किया जा रहा है, तो हाँ, अस्थायी तालिका का उपयोग करना एक बड़ी जीत है। यदि आप एक ही डेटा पर कई बार कई बार रैंडमाइजेशन चला रहे हैं, तो यह एक जीत हो सकती है, खासकर अगर टेबल मेमोरी में फिट होने के लिए बहुत बड़ी हैं। अन्यथा, एक बार चलने पर एक बड़ा प्रदर्शन लाभ होने की संभावना नहीं है, यह मानते हुए कि आप शर्तों को अंतरतम उपश्रेणियों के भीतर रखते हैं। हालांकि, अगर प्रदर्शन एक समस्या है, तो आप दो तरीकों का परीक्षण कर सकते हैं।
मैं अपनी प्रक्रिया के पैरामीटर के रूप में सरणी या समूहों को पास करना चाहता हूं। संग्रहित प्रक्रिया (एसक्यूएल सर्वर 2005) में सरणी पास करने के लिए कौन सा विकल्प सबसे अच्छा होगा।
हम्म, 2008 पर स्विच करें जिसमें टेबल वैल्यू पैरामीटर हैं। एरलैंड सोमरस्कोग द्वारा इस विषय पर एक अत्यधिक संदर्भ लेख यहां दिया गया है:http:// www.sommarskog.se/arrays-in-sql-2005.html ।