SQL Server IF NOT EXISTS Usage? -


ठीक है, तो मेरा स्कीमा यह है:

सारणी: टाइम्सशीट_होर्स

कॉलम :

  • Timesheet_Id (पी, पूर्णांक)
  • Staff_Id (int)
  • BookedHours (int)
  • Posted_Flag (बुलियन)

यह तालिका का एक अत्यंत सरलीकृत संस्करण है, लेकिन यह इस व्याख्यान के प्रयोजनों के लिए काम करेगा। मान लें कि एक व्यक्ति के पास केवल एक टाइलीशीट रिकॉर्ड हो सकता है।

मैं क्या करने की कोशिश कर रहा हूं, वर्कलाॉग नामक किसी अन्य तालिका में रिकॉर्ड जोड़ता है। प्रत्येक रिकॉर्ड में इसके साथ संबद्ध समय है। जब वह तालिका अपडेट हो जाती है, तो मैं Timesheet_Hours को भी अपडेट करना चाहता हूं।

Timesheet_Hours को अपडेट करने से पहले, मैं पहले देखना चाहता हूं कि संबंधित टाइम्सशीट पहले से ही पोस्ट नहीं हुए हैं, और तब मैं जांचना चाहता हूं कि वहां क्या है वास्तव में पहले स्थान पर अपडेट करने के लिए एक रिकॉर्ड है।

यदि बयान का पहला भाग है, जो यह देखने के लिए कि टाइम्सशीट पहले से पोस्ट नहीं हुए हैं, ठीक काम करता है समस्या दूसरा भाग है। यह देखने के लिए जांच है कि यह रिकॉर्ड पहले से ही अपडेट हो रहा है। समस्या यह है कि यह हमेशा एक त्रुटि उठाती है।

NB: नीचे दिए गए कोड को कार्यस्थल तालिका पर अपडेट द्वारा डाले गए एक संग्रहीत कार्यविधि से निकाला जाता है, डालें और ट्रिगर हटाएं। @PersonID उस तालिका के पैरामीटर में से एक है। संग्रहीत प्रक्रिया ठीक काम करता है। अगर मैं इस बयान के दूसरे भाग बाहर टिप्पणी

  अगर मौजूद है (1 Timesheet_Hours से का चयन करें जहां Posted_Flag = 1 और Staff_Id = @PersonID) RAISERROR शुरू ( 'Timesheets पहले से ही है नियुक्त किया गया! डिफ़ॉल्ट सूची लोड नहीं की गई ', 16, 1) ROLLBACK TRAN अंत और नहीं मौजूद है (1 Timesheet_Hours कहां Staff_Id = @PersonID) RAISERROR शुरू (से चुनें'! ', 16, 1) ROLLBACK TRAN अंत  

क्या आपने पुष्टि की है कि वास्तव में एक पंक्ति है जहां Staff_Id = @PersonID? आपके द्वारा पोस्ट किए गए कार्य एक परीक्षण स्क्रिप्ट में ठीक काम करते हैं, यह मानते हुए पंक्ति मौजूद है। आप डालने बयान टिप्पणी है, तो त्रुटि उठाया जाता है।

  nocount पर तालिका Timesheet_Hours बनाने (Staff_Id पूर्णांक, BookedHours पूर्णांक, Posted_Flag बिट) Timesheet_Hours में डालने (Staff_Id, BookedHours, Posted_Flag) सेट मान (1, 5.5, 0) घोषित @PersonID सेट int @PersonID = 1 यदि मौजूद है (Timesheet_Hours से 1 का चयन करें जहां Posted_Flag = 1 और Staff_Id = @PersonID) RAISERROR शुरू ( 'Timesheets पहले ही पोस्ट कर दिया है!', 16, 1) ROLLBACK TRAN अंत और नहीं मौजूद है (का चयन करें 1 Timesheet_Hours Staff_Id = @PersonID कहाँ से) शुरू RAISERROR ( 'डिफ़ॉल्ट सूची लोड नहीं किया गया है!', 16, 1) ROLLBACK TRAN अंत और के प्रिंट 'यहाँ कोई समस्या नहीं' ड्रॉप तालिका Timesheet_Hours  

Comments

Popular posts from this blog

c# - ListView onScroll event -

PHP - get image from byte array -

Linux Terminal Problem with Non-Canonical Terminal I/O app -