2010-07-05 16 views
11

मुझे मिल गया एक त्रुटि " 'डाला' और 'हटाया गया' तालिकाओं में पाठ, ntext, या छवि स्तंभ का उपयोग नहीं कर सकते" में पाठ, ntext, या छवि स्तंभ का उपयोग नहीं किया जा सकता है, वहाँ के बाद से मूल तालिका में ntext फ़ील्ड हैं, मैंने एक ट्रिगर संलग्न किया था। http://lazycodeprogrammer.blogspot.com/2009/08/how-to-use-inserteddeleted-with.html'डाला' और 'हटाया गया' टेबल

लेकिन मूल (गैर संशोधित) क्वेरी काफी जटिल है:

यहाँ एक समाधान है। जॉइन ऑपरेटर का उपयोग करके, शामिल किए गए से चुनें * के बजाय मुझे क्या लिखना चाहिए, जैसा कि इसकी अनुशंसा की जाती है?

+0

क्या यह आप क्या करना चाहते है? क्या आप हमें अपना ट्रिगर दिखा सकते हैं (कम से कम इसके सबसे प्रासंगिक भाग)? आपका प्रश्न बहुत स्पष्ट नहीं है .... –

+0

मैं अपने ट्रिगर के अंदर पंक्तियों को सम्मिलित करने की कोशिश कर रहा हूं। अगर मैं "चयन * से जुड़े" क्वेरी निष्पादित करता हूं, तो मुझे "डाला गया 'और' हटाई गई 'तालिकाओं में पाठ, ntext, या छवि कॉलम का उपयोग नहीं किया जा सकता है। मुझे पता है क्यों: क्योंकि मूल तालिका में ntext फ़ील्ड है। इस क्वेरी को हल करने के लिए मुझे अपनी क्वेरी को कैसे संशोधित करना चाहिए? – noober

+0

@noober, बिना किसी एसक्यूएल दिखाए, कोई भी कह सकता है कि आपने जो कुछ भी अपने लिंक में पोस्ट किया है उसे लागू करना है। –

उत्तर

8

एक अच्छा समाधान नहीं मिला है:

  1. चयन में सम्मिलित सिर्फ आईडी स्तंभ (यह Ntext नहीं कर रहा है या छवि और क्वेरी निष्पादित किया जा रहा है)।
  2. उसी तालिका के साथ मूल तालिका * से चुनें।
  3. यदि आवश्यक हो, तो पता लगाने के लिए INDERTED पर अद्यतन() का उपयोग करें, कौन से कॉलम बदल दिए गए हैं।
+3

यह वास्तव में इतना अच्छा समाधान नहीं है। हालांकि यह हटाए गए तालिका के साथ ठीक काम करता है, हटाए गए तालिका के साथ यह दृष्टिकोण गलत है क्योंकि आप अपडेट के बाद मान प्राप्त करेंगे, अद्यतन से पहले नहीं। – buhtla

13

वास्तविक समस्या आप अपने डाला तालिका में कॉलम उस प्रकार ntext, पाठ या छवि का चयन करने की कोशिश कर रहे हैं। ट्रिगर में इसकी अनुमति नहीं है।

वास्तविक समाधान एमएस द्वारा सुझाए गए अनुसार अपने सभी ntext, nvarchar (अधिकतम), वर्चर (अधिकतम) और छवि को varbinary (अधिकतम) में बदलने के लिए होगा।

एमएस कहा गया है कि उन प्रकार के अनुचित हैं और भविष्य के संस्करण में हटा दिया जाएगा।

इसके अलावा, ntext के बाद से कोई में पंक्ति डेटा देखते हैं वास्तव में प्रदर्शन के रूप में धीमी गति से कर रहे हैं।

+4

एलओएल। खैर, सबसे वास्तविक समस्या यह है कि एमएस हमें बताता है कि "उन प्रकारों को बहिष्कृत किया गया है और भविष्य के संस्करण, ब्लै-ब्ला-ब्ला में हटा दिया जाएगा", लेकिन वे उन्हें स्वयं ही उपयोग करते हैं। अनुमान लगाइए कहाँ? शेयरपॉइंट डीबी में। और मुझे पता होना चाहिए कि एनआईई के बावजूद कौन सी पंक्तियां बदली गई हैं और कौन से फ़ील्ड बदले गए हैं, सूचियों को संग्रहित करने के लिए व्यापक रूप से और सक्रिय रूप से उपयोग किए जाते हैं। मुझे पता है, आप क्या कहेंगे: "सीधे डीबी का उपयोग न करें, इसके बजाय ओएम का उपयोग करें"। कृपया, मत करो। मैं पिछले कई वर्षों में क्रैपी ओएम की खोज कर रहा था, कई परियोजनाओं, परफॉर्मेंस और फीचर सेट के दौरान मैं केवल डीबी स्तर पर उपलब्ध हूं। – noober

1

का उपयोग क्योंकि पाठ, ntext और छवि क्षेत्रों "डाला" और "नष्ट कर दिया" टेबल में उपलब्ध हैं "के बदले" चलाता समस्या का समाधान हो सकता है। यह देखने के लिए http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=148387 पर देखें कि यह कैसे किया जा सकता है।

0

yourtable पर डालने के बाद निम्नलिखित ट्रिगर का उपयोग करें:

SELECT textfields 
FROM yourtable 
WHERE EXISTS (
    SELECT 1 
    FROM {inserted/deleted} 
    WHERE {inserted/deleted}.PK = {yourtable}.PK 
) 
संबंधित मुद्दे