סקל סערווירער 2005 ניי ינטאָדוסעד די וועג צו ראָולבאַק די טראַנזאַקשאַנז אין סקל סערווירער 2005
שטעלן קסאַקט_אַבאָרט אויף
ווען קסאַקט_אַבאָרט איז אויף. די ג-סקל סטייטמאַנץ וועט אויטאָמאַטיש ראָולבאַק די מאַסע - מאַטן ווען טעות פארגעקומען אין סטייטמאַנץ.
שטעלן קסאַקט_אַבאָרט אויף
ניצן עמפּ
נעמען טראַן
אַרייַנלייגן אין עמפּינפאָ וואַלועס(1)
אַרייַנלייגן אין עמפּינפאָ וואַלועס(1) — דעם ויסזאָגונג וועט הייבן די ערשטיק שליסל טעות
אַרייַנלייגן אין עמפּינפאָ וואַלועס(2)
יבערגעבן טראַן
דער ערשטער שורה פון ויסזאָגונג וועט ויספירן אָן קיין ערראָרס. די ערשטיק שליסל טעות וועט כאַפּן אין צווייט שורה. אבער די גאנצע בלאָק מאַסע - מאַטן וועט ניט ווערן באגאנגען ווייַל די קסאַקט_אַבאָרט אין אויף.
איר זאָל טאָן אַז קסאַקט_אַבאָרט טערמינייץ דעם קראַנט * פּעקל *, נישט די גאנצע באַפֿעלן. באַטטשעס זענען צעשיידט מיט די גיין קיווערד. דורכפירונג וועט געדויערן בייַ דעם אָנהייב פון דער ווייַטער פּעקל.
This feature is also in SQL Server 2000, though it behaves slightly differently for various errors.
In SQL 2000, עס זענען קאַסעס ווו קסאַקט_אַבאָרט פיילז צו ראָולבאַק די מאַסע - מאַטן אויטאָמאַטיש.
לעמאָשל:
ינסערטינג אין אַ פאַרקריפּלט זייַל נאָמען.
ינסערטינג אין אַ ערשטיק שליסל מיט ידענטיטי_ינסערט אַוועק.
Executing a SELECT that uses a non-existent UDF.
These types of errors are usually due to a poorly authored command, so they don’t occur in the day-to-day operation of your program unless someone alters the schema. But I account for their possibility when authoring database update scripts when deploying a new version of a project, just in case deployment doesn’t go as planned.
There are ways to handle these errors. Your COMMIT should be in the batch performing the DML statements. After the batch (after the GO keyword) you can check the @@TRANCOUNT to see if it’s greater than zero and act accordingly. Usually ROLLBACK the transaction.
Transactions can span batches, so you can execute a rollback in a subsequent batch.