2010-08-23 8 views
6

मैं यह पता लगाने की कोशिश कर रहा हूं कि निम्न कोड को उस पंक्ति को वापस करने के लिए कैसे प्राप्त किया जाए, जिसने इसे अभी डाला - एक सह-कार्यकर्ता ने इंगित किया और सुझाव दिया कि वैकल्पिक पूर्ण कैटलॉग uiris_production REBUILD चल रहा है लेकिन इसे उपयोगकर्ता लेनदेन में नहीं चलाया जा सकता है।मैं mssql में किसी लेनदेन के भीतर पूर्ण टेक्स्ट इंडेक्स का रीफ्रेश कैसे करूं?

यह लेनदेन में होना आवश्यक कारण यह है कि यह एक परीक्षण ढांचे से आ रहा है जहां परीक्षण लेनदेन में लपेटा जाता है और फिर वापस लुढ़का जाता है।

declare @search varchar(64) 
set @login_test = 'foobar' 
set @search = '"' + @login_test + '*"' 

begin transaction 
    insert into users(login) values (@login_test) 
    select login from users where contains(login, @search) 
commit 
+0

यह यूनिट परीक्षण नहीं है यदि यह डेटाबेस (या कोई अन्य बाहरी डेटा स्रोत) को छूता है –

उत्तर

3

सबसे पहले, सुनिश्चित करें कि आपका पूर्ण टेक्स्ट इंडेक्स स्वचालित परिवर्तन ट्रैकिंग के लिए स्थापित है। इस क्वेरी के लिए change_tracking_state 'ए' होना चाहिए।

select t.name, fi.change_tracking_state 
    from sys.fulltext_indexes fi 
     inner join sys.tables t 
      on fi.object_id = t.object_id 
    where t.name = 'users' 

लेकिन स्वचालित परिवर्तन ट्रैकिंग के साथ भी, पूर्ण टेक्स्ट अपडेट करने में विलंबता की एक निश्चित डिग्री है। इसे समायोजित करने के लिए आपको अपने यूनिट परीक्षण में WAITFOR बनाने की आवश्यकता हो सकती है।

+0

स्वचालित परिवर्तन ट्रैकिंग सक्षम होने के बावजूद ऐसा लगता है कि पूर्ण टेक्स्ट इंडेक्स केवल तभी अपडेट किए जाते हैं जब लेनदेन किया जाता है, इसलिए प्रतीक्षा के लिए कोई प्रभाव नहीं पड़ेगा। यह करना संभव नहीं लगता ... :( – ajbeaven

-2
SELECT SCOPE_IDENTITY() 

आप रिकॉर्ड आपने अभी बनाया का आईडी कहते थे।

+0

ओप पूछ रहा है कि पूरी पंक्ति कैसे प्राप्त करें; न केवल आईडी। शायद आप उन्हें यह भी सुझाव दे सकते हैं कि वे आईडी को सम्मिलित पंक्ति से लाएं, फिर उस आईडी पर एक चयन लुकअप करें? –

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