मैं नए सॉफ्टवेयर विकसित करते समय मौजूदा डेटाबेस में परिवर्तन कर रहा हूं। वहाँ भी काफी विरासत सॉफ्टवेयर का एक बहुत है कि डेटाबेस काम जारी रखने की जरूरत है कि का उपयोग करता है, यानी मैं मौजूदा डेटाबेस तालिकाओं, procs, आदि को बनाए रखने के लिए करना चाहते हैंअद्यतन ट्रिगर की स्थापना और प्राथमिक कुंजी को अपडेट करना
वर्तमान में मेरे पास है तालिका
CREATE TABLE dbo.t_station ( tx_station_id VARCHAR(4) NOT NULL, tx_description NVARCHAR(max) NOT NULL, tx_station_type CHAR(1) NOT NULL, tx_current_order_num VARCHAR(20) NOT NULL, PRIMARY KEY (tx_station_id) )
मुझे इस तालिका में एक नया क्षेत्र शामिल करना होगा जो एक संयंत्र (उत्पादन सुविधा) को संदर्भित करता है और tx_current_order_num को दूसरी तालिका में ले जाता है क्योंकि यह सभी पंक्तियों के लिए आवश्यक नहीं है। तो मैं बना लिया है नया टेबल: -
CREATE TABLE Private.Plant ( PlantCode INT NOT NULL, Description NVARCHAR(max) NOT NULL, PRIMARY KEY (PlantCode) ) CREATE TABLE Private.Station ( StationId VARCHAR(4) NOT NULL, Description NVARCHAR(max) NOT NULL, StationType CHAR(1) NOT NULL, PlantCode INT NOT NULL, PRIMARY KEY (StationId), FOREIGN KEY (PlantCode) REFERENCES Private.Plant (PlantCode) ) CREATE TABLE Private.StationOrder ( StationId VARCHAR(4) NOT NULL, OrderNumber VARCHAR(20) NOT NULL, PRIMARY KEY (StationId) )
अब, मैं दो स्थानों पर एक ही डेटा है नहीं करना चाहती तो मैं एक दृश्य में dbo.t_station तालिका बदल सकते हैं और करने के लिए ट्रिगर के बजाय प्रदान करने का निर्णय लिया हटाएं, अंदरूनी और अद्यतन करें। कोई समस्या नहीं है [उनमें से अधिकांश] काम कर रहे हैं।
मेरा प्रश्न अद्यतन कुंजी ट्रिगर के इंस्टीटैड का संबंध है, प्राथमिक कुंजी कॉलम (tx_station_id) को अपडेट करना और एकाधिक पंक्तियों के अपडेट।
ट्रिगर ब्लॉक के अंदर, क्या सम्मिलित और हटाए गए [psuedo] तालिकाओं में शामिल होने का कोई तरीका है ताकि मैं 'प्राथमिक कुंजी अपडेट करने से पहले' और 'प्राथमिक कुंजी अपडेट के बाद' जान सकूं? कुछ इस तरह ...
UPDATE sta SET sta.StationId = ins.tx_station_id FROM Private.Station AS sta INNER JOIN deleted AS del INNER JOIN inserted AS ins ON ROW_IDENTITY_OF(del) = ROW_IDENTITY_OF(ins) ON del.tx_station_id = sta.StationId
इस स्तर पर यदि प्राथमिक कुंजी स्तंभ अद्यतन किया जाता है मैं ट्रिगर ब्लॉक कि अद्यतन rollbacks में एक चेक डाल दिया है और वहाँ डाला, या हटाया गया में एक से अधिक पंक्ति है , टेबल।
मुझे उम्मीद थी कि किसी के पास बेहतर जवाब हो सकता है! इस समस्या ने मुझे अतीत में भी परेशान किया है। –