6

मैं कोल्डफ्यूजन 7 एप्लिकेशन पर किसी समस्या को डीबग करने के लिए SQL Server 2008 R2 प्रोफाइलर का उपयोग कर रहा हूं - जिसे किसी और द्वारा विकसित किया गया था - विंडोज 7 पर चल रहा है एक बैकएंड के रूप में एसक्यूएल सर्वर 2008 आर 2। एप्लिकेशन मूल रूप से एमएस एक्सेस 2003 का उपयोग बैकएंड के रूप में कर रहा था जिसे बाद में SQL Server 2008 R2 में परिवर्तित कर दिया गया था। प्रोफाइलर निम्न SQL दिखा रहा है जो SCOPE_IDENTITY() का उपयोग कर रहा है, लेकिन जब मैं एक खोज उपयोगिता का उपयोग कर अनुप्रयोग रूट निर्देशिका खोजता हूं, तो फ़ाइल में SCOPE_IDENTITY() फ़ंक्शन को उनके SQL क्वेरी में कहीं भी उपयोग नहीं किया जाता है। ऐप के लिए SQL सर्वर डेटाबेस में कोई संग्रहित प्रक्रिया, विचार, फ़ंक्शन इत्यादि नहीं है। सभी SQL क्वेरी कोल्डफ्यूज़न फ़ाइलों के अंदर एम्बेडेड प्रश्न हैं। कहाँ तो प्रोफाइलर हो रही है SCOPE_IDENTITY() फ़ंक्शन:एसक्यूएल सर्वर प्रोफाइलर SCOPE_IDENTITY() दिखा रहा है जबकि कोल्डफ्यूजन कोड किसी भी प्रश्न में इसका उपयोग नहीं कर रहा है

declare @p1 int 
set @p1=11 
exec sp_prepexec @p1 output,N'@P1 datetimeoffset,@P2 varchar(8000),@P3 int,@P4 varchar(8000)',N'insert into ProductItems (item_date , item_description, item_type) 
values (
@P1 , 
@P2 , 
@P3 , 
) select SCOPE_IDENTITY()','2015-10-19 00:00:00 +00:00','Test description',1 
select @p1 

अद्यतन हालांकि मूल रूप से एप्लिकेशन सीएफ 7 में विकसित किया गया था, सीएफ 7 बाद में CF9 में अपग्रेड किया गया है और अब मैं स्थानीय मशीन है पर यह डिबगिंग कर रहा हूँ सीएफ़ 11. मुझे नहीं पता कि सीएफ 7 को सीएफ 8 के साथ बदल दिया गया था और फिर सीएफ 9 के साथ बदल दिया गया था। प्रोफाइलर में उपरोक्त एसक्यूएल उत्पन्न करने वाली सीएफक्व्यूरी जैसी दिखती है। इसके अलावा, मेज ProductItems एक पहचान स्तंभ है, डाटाबेस किसी भी चलाता उपयोग कर रहा है नहीं, और CFquery टैग परिणाम विशेषता का उपयोग नहीं कर रहे हैं:

<cfquery name="addProductItems" datasource="#dtsource#"> 
    insert into Productitems (item_date,item_description,item_type) 
    values (
    <cfqueryPARAM value = "#item_dat#" CFSQLType = "CF_SQL_TIMESTAMP" null="#item_dat eq '-1'#">, 
    <cfqueryPARAM value = "#item_description#" CFSQLType = "CF_SQL_VARCHAR">, 
    <cfqueryPARAM value = "#item_type#" CFSQLType = "CF_SQL_INTEGER"> 
    ) 
</cfquery> 
+0

INSERT के लिए वास्तविक CF कोड क्या है? – Leigh

उत्तर

7

मेरा अनुमान होगा CF सर्वर यह स्वचालित रूप से जोड़ रहा है। मुझे पता है कि आपने कहा है कि आप एमएक्स 7 का उपयोग कर रहे हैं, लेकिन ... वापस कोल्डफ्यूजन 8 में, एक नई सुविधा पेश की गई थी जो जेनरेट आईडी को सरल INSERT कथन से पुनर्प्राप्त करता है। SQL सर्वर में यह को INSERT क्वेरी में जोड़कर पूरा किया गया था। उस समय निश्चित रूप से कुछ समस्याएं हुईं। अधिक जानकारी के लिए, देखें:

एनबी: कार्यान्वयन बाद के संस्करणों में बदल गया हो।

beloitdavisja mentioned in the comments के रूप में, result विशेषता वाले cfquery टैग देखें। Result एक संरचना है जिसमें निष्पादित क्वेरी के बारे में विवरण शामिल है। सीएफ 8 में, उत्पन्न रिकॉर्ड आईडी कुंजी IDENTITYCOL के तहत वापस आती है। बाद के संस्करणों में, इसमें डेटाबेस अज्ञेय संस्करण, GENERATEDKEY भी शामिल है।

+4

यह मेरा अनुमान भी था। @nam - 'cfquery' टैग ढूंढें जिनके पास' परिणाम 'विशेषता है। इस परिणाम में एक प्रमुख 'GENERATEDKEY' है जो सीएफ सम्मिलित पहचान – beloitdavisja

+2

@beloitdavisja - Yep स्टोर करता है। हालांकि, आईआईआरसी डीबी-अज्ञेयवादी 'GENERATEDKEY' CF8 में मौजूद नहीं था। इसे बाद में जोड़ा गया था। सीएफ 8, केवल MySQL डीबी के लिए 'GENERATED_KEY' का समर्थन करता है (@nam - अंडरस्कोर नोट करें)। – Leigh

+2

यह भी ध्यान देने योग्य नहीं है कि आपको डेटाबेस में परिभाषित कोई ट्रिगर्स नहीं मिला है क्योंकि ये SQL को निष्पादित कर सकते हैं कि आप अपनी सीएफ कोड खोज में नहीं देख पाएंगे। हालांकि संग्रहित प्रक्रिया कॉल के ऊपर के रूप में तैयार कथन की तरह दिखता है कि आप डीबी चालक को cfqueryparam का उपयोग करते समय cfquery के लिए आउटपुट करने की अपेक्षा करेंगे, और सीएफ 8 में सीओपीओसीआईडीएनटीआईटी() की अपेक्षा की जाएगी जब सीएफक्व्यूरी परिणाम विशेषता निर्दिष्ट किया गया है। यह देखने के लिए बस अजीब बात है कि यदि आप वास्तव में अभी भी CF7 पर हैं। –

संबंधित मुद्दे