এসকিএল সার্ভারের সমস্ত কিছু একটি লেনদেনের মধ্যে রয়েছে।
আপনি যখন স্পষ্টভাবে নির্দিষ্ট করেন begin transaction
এবং end transaction
তারপরে এটিকে স্পষ্ট লেনদেন বলা হয় । আপনি যখন না ডান, তবে এটি অন্তর্ভুক্ত লেনদেন ।
আপনি কোন মোডে আছেন তা স্যুইচ করতে, আপনি ব্যবহার করবেন
set implicit_transactions on
অথবা
set implicit_transactions off
select @@OPTIONS & 2
যদি উপরে 2 প্রদান করে, আপনি অন্তর্ভুক্ত লেনদেনের মোডে আছেন। যদি এটি 0 ফেরত দেয় তবে আপনি স্বতঃসংশ্লিষ্ট in
একটি লেনদেন হ'ল সমস্ত বা কিছুই না একটি ডাটাবেস একটি সুসংগত অবস্থায় রাখতে .. এসিডি বৈশিষ্ট্য মনে রাখবেন।
CREATE TABLE [dbo].[Products](
[ProductID] [int] NOT NULL,
[ProductName] [varchar](25) NULL,
[DatabaseName] [sysname] NOT NULL,
CONSTRAINT [pk_Product_ID_ServerName] PRIMARY KEY CLUSTERED
(
[ProductID] ASC,
[DatabaseName] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
-- insert some data
INSERT INTO [dbo].[Products]([ProductID], [ProductName], [DatabaseName])
SELECT 1, N'repl1_product1', N'repl1' UNION ALL
SELECT 1, N'repl2_product1_02', N'repl2' UNION ALL
SELECT 1, N'repl3_product1_03', N'repl3' UNION ALL
SELECT 2, N'repl1_product1_01', N'repl1' UNION ALL
SELECT 2, N'repl2_product1', N'repl2' UNION ALL
SELECT 2, N'repl3_product1_03', N'repl3' UNION ALL
SELECT 3, N'repl1_product1_01', N'repl1' UNION ALL
SELECT 3, N'repl2_product1_02', N'repl2' UNION ALL
SELECT 3, N'repl3_product1', N'repl3' UNION ALL
SELECT 4, N'repl1_product1_01', N'repl1' UNION ALL
SELECT 4, N'repl2_product1_02', N'repl2' UNION ALL
SELECT 5, N'repl1_product1_01', N'repl1' UNION ALL
SELECT 5, N'repl2_product1_02', N'repl2'
- এখনই এসপি তৈরি করুন - নোট করুন যে প্রথম 3 টি সফল হবে এবং চতুর্থটি স্ট্রিং কাটার কারণে ব্যর্থ হবে ...
IF OBJECT_ID ('usp_UpdateProducts', 'P') IS NOT NULL
DROP PROCEDURE usp_UpdateProducts;
GO
create procedure usp_UpdateProducts
as
begin try
update Products
set ProductName = 'repl1_product1'
where DatabaseName = 'repl1'and ProductID = 1;
update Products
set ProductName = 'repl2_product1'
where DatabaseName = 'repl2' and ProductID = 2;
update Products
set ProductName = 'repl3_product1'
where DatabaseName = 'repl3' and ProductID = 3;
update Products
set ProductName = 'repl3_product1_03&&&&&&&&&&39399338492w9924389234923482' -- this will fail ...
where DatabaseName = 'repl3' and ProductID = 4;
SELECT 1/0;
end try
begin catch
SELECT
ERROR_NUMBER() AS ErrorNumber,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_STATE() as ErrorState,
ERROR_PROCEDURE() as ErrorProcedure,
ERROR_LINE() as ErrorLine,
ERROR_MESSAGE() as ErrorMessage;
end catch
go
দেখুন: সর্বদা লেনদেন তৈরি করা কি খারাপ অভ্যাস?