SQL सर्वर में, तालिका-मूल्यवान फ़ंक्शन के माध्यम से डेटा अपडेट करना संभव है।
मेरा मतलब है, आप अंतर्निहित तालिकाओं में डेटा अपडेट कर सकते हैं जो फ़ंक्शन क्वेरी करता है।
उदाहरण के लिए, यदि आपका फ़ंक्शन किसी तालिका से किसी का पहला नाम लौटाता है, तो आप UPDATE
चलाकर उनका पहला नाम अपडेट कर सकते हैं तालिका के बजाय फ़ंक्शन के विरुद्ध कथन।
ध्यान दें कि यह केवल इनलाइन टेबल-वैल्यू फंक्शन (आईटीवीएफ) पर काम करता है। जहां तक मेरी जानकारी है, यह मल्टी-स्टेटमेंट टेबल-वैल्यूड फंक्शन्स (MSTVFs) पर काम नहीं करेगा।
साथ ही, आपके द्वारा अपडेट किए जाने वाले कॉलम फ़ंक्शन की क्वेरी में मान्य कॉलम होने चाहिए।
उदाहरण 1 - नमूना कार्य
यहां एक त्वरित फ़ंक्शन है जो किसी तालिका से मूल डेटा का चयन करता है।
CREATE FUNCTION udf_GetScore_ITVF( @Player varchar(255)) RETURNS TABLE AS RETURN ( SELECT Score FROM dbo.Scoreboard WHERE Player = @Player ); GO
यह फ़ंक्शन किसी दिए गए खिलाड़ी के लिए केवल स्कोर का चयन करता है।
मैं इस फ़ंक्शन का उपयोग किसी खिलाड़ी के स्कोर को अपडेट करने के लिए कर सकता हूं।
मुझे पता है कि तालिका-मूल्यवान फ़ंक्शन का उपयोग करते समय आप आमतौर पर एक से अधिक कॉलम लौटाते हैं, लेकिन मैं इस उदाहरण को प्रदर्शन उद्देश्यों के लिए सरल रखना चाहता हूं।
उदाहरण 2 - फ़ंक्शन के माध्यम से डेटा अपडेट करें
यहां खिलाड़ी के स्कोर को अपडेट करने का एक उदाहरण दिया गया है।
सबसे पहले, देखते हैं कि उस खिलाड़ी का वर्तमान स्कोर क्या है।
SELECT * FROM udf_GetScore_ITVF('Homer');
परिणाम:
+---------+ | Score | |---------| | 1 | +---------+
तो होमर का स्कोर 1 है।
आइए इसे बढ़ाने के लिए तालिका-मूल्यवान फ़ंक्शन का उपयोग करें।
UPDATE udf_GetScore_ITVF('Homer') SET Score = 99999; SELECT * FROM udf_GetScore_ITVF('Homer');
परिणाम:
+---------+ | Score | |---------| | 99999 | +---------+
इसलिए मैंने इनलाइन टेबल-वैल्यू फ़ंक्शन का उपयोग करके होमर के स्कोर को सफलतापूर्वक बढ़ाया।
उदाहरण 3 - जब यह काम नहीं करेगा
आप जिन वास्तविक कॉलमों को अपडेट करने में सक्षम हैं, वे क्वेरी में चुने जा रहे कॉलम पर निर्भर करेंगे। मेरी क्वेरी केवल Score
. का चयन करती है कॉलम, इसलिए मैं केवल उस कॉलम में डेटा अपडेट कर सकता हूं।
यदि मैं किसी अन्य कॉलम में डेटा अपडेट करने का प्रयास करता हूं तो यहां क्या होता है।
UPDATE udf_GetScore_ITVF('Homer') SET Player = 'Apu';
परिणाम:
Msg 207, Level 16, State 1, Line 1 Invalid column name 'Player'.
हम जानते हैं कि तालिका में एक Player
है कॉलम (क्योंकि यह WHERE
. में है समारोह का खंड)। हालांकि, इसे क्वेरी में नहीं चुना गया है, और इसलिए, यह अपडेट करने के लिए मान्य कॉलम नहीं है।