मैं एक सौदे में कोई त्रुटि होती है तो रोलबैक कर सकते हैं:TSQL लेन-देन एक बयान के बाद दोनों @@ त्रुटि और @@ ROWCOUNT जाँच
CREATE PROCEDURE [dbo].[MySproc]
(
@Param1 [int]
)
AS
BEGIN TRAN
SET NOCOUNT ON;
SELECT @Param1
UPDATE [dbo].[Table1]
SET Col2 = 'something'
WHERE Col1 = @Param1
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
RETURN -12
END
...
लेकिन अगर Col1 = @Param1
लेनदेन के साथ Table1
में कोई एंट्री नहीं है सफलतापूर्वक करता है, जो मेरे लिए बुरा है। मैं जांचना चाहता हूं कि Col2 = 'something'
वास्तव में किया गया है या नहीं। यदि नहीं, तो एक विशेष वापसी कोड के साथ रोलबैक।
अगर मैं @@error
जांच के बाद @@rowcount
जांच सम्मिलित करने के लिए, निम्नलिखित की तरह का प्रयास करें:
CREATE PROCEDURE [dbo].[MySproc]
(
@Param1 [int]
)
AS
BEGIN TRAN
SET NOCOUNT ON;
SELECT @Param1
UPDATE [dbo].[Table1]
SET Col2 = 'something'
WHERE Col1 = @Param1
IF @@ERROR <> 0
BEGIN
ROLLBACK TRAN
RETURN -12
END
IF @@ROWCOUNT = 0
BEGIN
ROLLBACK TRAN
RETURN -27
END
...
यह हमेशा की तरह, इस बिंदु पर रोलबैक क्योंकि @@rowcount
आखिरी बयान का मूल्यांकन करता है तो वह हमेशा 0
बराबर होती है।
@@error
और प्रभावित पंक्तियों की संख्या दोनों को कैसे जांचें?
+1। हां। यह एक क्लासिक गलती है। –