संग्रहित प्रक्रिया दिन की बचत होगी मदद करता है।
यहां मुझे लगता है कि COL_A और COL_B अद्वितीय कॉलम हैं और INT एनबी के प्रकार हैं! एसक्यूएल-सर्वर इंस्टेंस एटीएम नहीं है इसलिए सिंटैक्स की शुद्धता की गारंटी नहीं दे सकता है। अपडेट करें! यहाँ SQLFIDDLE
CREATE TABLE mytable
(
COL_A int UNIQUE,
COL_B int UNIQUE,
COL_C int,
COL_D int,
)
GO
INSERT INTO mytable (COL_A, COL_B, COL_C, COL_D)
VALUES (1,1,1,1),
(2,2,2,2),
(3,3,3,3),
(4,4,4,4);
GO
CREATE PROCEDURE updateDuplicate(@COL_A INT, @COL_B INT, @COL_C INT, @COL_D INT)
AS
BEGIN
DECLARE @ret INT
SELECT @ret = COUNT(*)
FROM mytable p
WHERE p.COL_A = @COL_A
AND p.COL_B = @COL_B
IF (@ret = 0)
INSERT INTO mytable (COL_A, COL_B, COL_C, COL_D)
VALUES (@COL_A, @COL_B, @COL_C, @COL_D)
IF (@ret > 0)
UPDATE mytable SET COL_D = @COL_D WHERE col_A = @COL_A AND COL_B = @COL_B
END;
GO
के लिए एक लिंक फिर अद्यतन बयान के बजाय आवश्यक मूल्यों के साथ इस प्रक्रिया को फोन
exec updateDuplicate 1, 1, 1, 2
GO
SELECT * from mytable
GO
सी [इस सवाल] (http: // सहायता के लिए stackoverflow.com/questions/108403/solutions-for-insert-or-update-on-sql-server)। – Phylogenesis
यह भी उपयोगी हो सकता है: http://stackoverflow.com/questions/1197733/does-sql-server-offer-anything-like-mysqls-on-duplicate-key-update –
क्या आपको सभी आवेषणों पर इस व्यवहार की आवश्यकता है, या सिर्फ विशिष्ट वाले? – StuartLC