我需要帮助实现相当复杂的业务逻辑,它在许多表上操作,并执行相当多的SQL命令。然而,我希望确保数据不会处于不一致的状态,直到现在,我还没有看到不需要嵌套事务的解决方案。我写了一个简单的伪代码,它说明了一个类似于我想要完成的场景:
Dictionary<int, bool> opSucceeded = new Dictionary<int, bool> ();
for (int i = 0; i < 10; i++)
{
try
{
// this operation must be atomic
Operat
我正在编写一个脚本,它将从许多表中删除记录,但在删除之前,它必须返回一个计数,以便用户在提交之前进行确认。
这是该脚本的摘要。
BEGIN TRANSACTION SCHEDULEDELETE
BEGIN TRY
DELETE -- delete commands full SQL cut out
DELETE -- delete commands full SQL cut out
DELETE -- delete commands full SQL cut out
PRINT 'X rows dele
我已经设置了一个cron作业(PHP脚本),它执行以下任务:
1. Read all of the unseen emails, using imap
1.1 For each email readed
1.2. Fetches the details and save detail in database
1.3. Moves email to other mailbox named "Processed"
1.4. Goto step 1.1
但是,如果PHP脚本停止或失败了执行,在步骤1.2之后但在1.3之前的,电子邮件将是再处理,这就是这里的问
我工作的公司专门为所有数据库交互、选择、更新、删除使用存储过程(和一个本地的ORM)。
我们有许多procs将从表中插入和/或更新和/或删除。
当需要对整个proc进行“事务化”时,显然需要有我们的commit和rollback语句。
问题从何而来。
当一个事务中有多个语句需要一起提交或回滚时,我们显然会抛出一个try/catch块。
让我们假设脚本的这个示例场景:
set nocount on
create table #test
(
id int primary key identity(1,1),
col varchar(2) not null,
y int n
我正在为我的数据库中的所有对象创建DDL,以便传播到上层环境。我希望确保一个全有或全无事务,包括所有数据库对象创建/更改和数据加载插入。有没有这么简单,或者有什么需要注意的?
BEGIN TRANSACTION
-- include create script generated from ssms
-- include insert data load scripts
COMMIT
我通常只使用事务进行多表插入等操作。
我有以下问题。我必须存储过程(调试消息双缩进):
CREATE PROC innerProc
AS
BEGIN
SELECT 'innerProc 1',@@TRANCOUNT
BEGIN TRAN
SELECT 'innerProc 2',@@TRANCOUNT
ROLLBACK
SELECT 'innerProc 3',@@TRANCOUNT
END
GO -----------------------------------------
CREATE PROC oute
我正在体验性能下降在我们的火鸟存储过程之一,我不知道为什么。我在提到的SP中找到了以下代码:
declare v_dummy integer;
...
in autonomous transaction do
begin
-- insert may fail, but that is not a problem because it means the record is already there
insert into my_table(my_field) values (:input_param);
when ANY do
v_dummy = 1;
end
我在状态为3的RD
Python2.7.9 Django 1.7 MySQL 5.6
我想填充属于多个类的大量对象实例,将它们堆叠到一个create()-like查询中,打开数据库连接,执行查询,然后关闭。我的主要动机是性能,但代码紧凑也是一个好处。
bulk_create()的功能似乎正是我想要的,但我至少违反了列出的中的一个,即
它不适用于多到多的关系。
和
它不适用于多表继承场景中的子模型。
因此,在中也描述了这些限制:
# So this case is fun. When you bulk insert you don't get the primary
# keys back
据我所知,如果我们以begin tran/ commit tran开始语句,它将完全完成或什么也不做。但是当我执行下面的TSQL代码时,它会更新第一个表n的记录,不做任何事情,也不提交或回滚。我也尝试过if @@error<> 0,但它也不是working..Please来帮我。
BEGIN TRAN
UPDATE A SET NAME ='ABC' WHERE ID=2
INSERT INTO TTT VALUES('GJ')
COMMIT TRAN
TABLE TTT DOES NOT EXIST.
我使用这个表在这段代码中抛出了一个错误
我使用TRY CATCH块捕获错误并进行回滚。
ALTER PROCEDURE sp_first
/*
parameters
*/
BEGIN TRY
BEGIN TRANSACTION
/*
statements
*/
COMMIT
END TRY
BEGIN CATCH
IF(@@TRANCOUNT>0)
ROLLBACK
END CATCH
如果在sp_inner内部调用另一个存储过程sp_first,它也执行DML语句插入、删除、更新等,那么上述方法是否有效?
ALTER PROCEDURE sp_first
/*
parameters
*/
BEGIN TRY
我有一个存储过程,其中只执行3个存储过程。如果主SP成功,我只使用一个参数来存储。
如果第一个存储过程在主存储过程中工作良好,但是第二个存储过程失败,那么它会自动回滚主SP中的所有SP,还是必须发出一些命令?
这是我的程序:
CREATE PROCEDURE [dbo].[spSavesomename]
-- Add the parameters for the stored procedure here
@successful bit = null output
AS
BEGIN
begin transaction createSavebillinginvoice
在存储过程中,我有一个try catch块,其中包含一个事务,如果控件从未传递给catch,它将提交,否则,如果出现错误,则回滚,而控件确实传递给catch块。
我在事务中运行这个存储过程,如下例所示:
CREATE PROCEDURE sp_test
AS
BEGIN
BEGIN TRY
BEGIN TRAN
DECLARE @var INT = 1
IF @var <> 2
BEGIN
RAISERROR('