我有一个剧本:
Create Table AA (ID int identity(1,1), Col1 varchar(10))
Create Table BB (ID int identity(1,1), Col1 varchar(10))
GO
Create proc p6
as
insert into AA
(Col1)
Values('')
GO
Create Trigger [dbo].[TR_AA] on [dbo].[AA]
After insert
As
--Set XACT_Abort off
Select 1/0
GO
Begin Try
Begin
如果我做了以下操作:
CREATE TABLE t1
(a INT NOT NULL PRIMARY KEY);
CREATE TABLE t2
(a INT NOT NULL REFERENCES t1(a));
INSERT INTO t1 VALUES (1);
INSERT INTO t1 VALUES (3);
INSERT INTO t1 VALUES (4);
INSERT INTO t1 VALUES (6);
GO
在那之后,我做了这个:
SET XACT_ABORT ON;
BEGIN TRANSACTION
INS
我有一个存储过程,我使用事务从c#代码中调用它。当我在C#中运行代码(它是一个控制台应用程序)时,没有从catch块获得结果,而是抛出了一个异常:
在批处理结束时检测到不可提交事务。事务被回滚。
C#代码:
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
namespace app1
{
class Program
{
static void Main(string[] args)
{
我工作的公司专门为所有数据库交互、选择、更新、删除使用存储过程(和一个本地的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
我有这样的疑问:
use DataIncremental
go
DECLARE @row_terminator CHAR;
SET @row_terminator = CHAR(10); -- or char(10)
BEGIN TRAN tran2
DECLARE @stmt NVARCHAR(2000);
SET @stmt = '
BULK INSERT accn_adjustments
FROM ''C:\Users\agordon\Desktop\incrementaljan2012\accn_adjustments_201112302112.
与使用EF核心管理交易有关的问题:
IDbContextTransaction.Rollback()是否有机会返回异常,以便将其放置在try块中是有意义的?
即
try
{
//...
if(condition)
transaction.Commit();
else
throw methodReturn.Exception;
}
catch (Exception e)
{
try // Does this try make any se
我正在为ActiveCollab开发一个模块。直到今天,当我尝试对其中一个表运行更新命令时,一切都运行得很好。下面是命令:
UPDATE `acx_credit_card_vault_recurring` SET `status`='1' WHERE `id`='2'
令我不快的是,它并没有起作用。我尝试了相同的命令,将其复制粘贴到phpmyadmin SQL文本框中,并运行它,没有任何问题。
我完全删除了表,并通过脚本创建了它,以确保不存在与权限相关的问题(?):
$result = DB::execute("CREATE TABLE IF NOT E
我有以下问题。我必须存储过程(调试消息双缩进):
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
我试着让我的大脑围绕这一点,但无法让它工作,所以我在这里提供了一个小测试用例,希望有人能解释给我:
首先是一个小的测试数据库:
CREATE DATABASE test;
USE test;
CREATE TABLE testA (nr INT)
GO
CREATE TRIGGER triggerTestA
ON testA
FOR INSERT AS BEGIN
SET NOCOUNT ON;
IF EXISTS (SELECT nr FROM Inserted WHERE nr > 10)
RAISERROR('Too high number!',
可能重复:
如果不允许回滚截断语句,那么它如何在事务中回滚?考虑以下代码:
USE tempdb
GO
-- Create Test Table
CREATE TABLE TruncateTest (ID INT)
INSERT INTO TruncateTest (ID)
SELECT 1
UNION ALL
SELECT 2
UNION ALL
SELECT 3
GO
-- Check the data before truncate
SELECT * FROM TruncateTest
GO
-- Begin Transaction
BEGIN TRAN
-- Truncate
以下存储过程是根据本文中的模板实现的:。这个存储过程被认为是用来处理死锁的,它被另一个已经创建了事务的存储过程调用。内部事务的BEGIN/COMMIT的某些魔术不匹配,因为我得到一个异常:Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 1, current count = 0。据我所知,catch被执行,@xstate = -1为true,整个外部事务被回滚。
你知道哪里会发生不匹配吗?
CREATE PROCEDURE
我有一个TSQL代码来将数据从ORACLE移动到SQL服务器。计划每天运行。但是,由于某些原因,它不像预期的那样工作,比如需要很长时间才能完成执行,并且获得错误(如错误3902 ),提交事务请求没有相应的BEGIN事务。代码在本地服务器上进行了测试,并且运行正常。我对代码的某些部分有一些疑问。
SOME CODE REGARDING MOVEMENT OF DATE FROM ORACLE TO SQL SERVER
GO
begin transaction
commit;
go
我的疑虑如下:
我读过GO不是TSQL命令。那么,它在调度程序中工作吗?
应该显式
我有一个用Transact-SQL编写的迁移脚本,它使用事务,以便在执行过程中出现错误时进行适当的回滚。不幸的是,当我在脚本中使用一些GO实用程序语句时,这种回滚行为并不能像预期的那样工作。 这个问题可以用一个简单的脚本重现: BEGIN TRANSACTION
-- Create a table with two nullable columns
CREATE TABLE [dbo].[t1](
[id] [nvarchar](36) NULL,
[name] [nvarchar](36) NULL
)
-- add one row having one NULL co
我来自甲骨文背景,对Server有点困惑。
我希望停止Server自动提交我的插入命令。所以我正在使用begin transaction。在下面的演示中,我将在测试表中插入100行,并在事务结束时回滚。我期望的结果是90行(提交应该在30、60和90行),rest 10记录应该回滚。
CREATE TABLE test (TEST_ID INT);
GO
DECLARE @cnt INT=0;
BEGIN TRANSACTION t1;
WHILE @cnt < 100
BEGIN
INSERT INTO test values (@cnt);
SET @cnt += 1;
我有一个存储过程,其中只执行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
我遇到了这样的问题。我有这个事务,$(FilePath)指定了另一个脚本,它应该开始运行。
BEGIN TRANSACTION
:r $(FilePath)
GO
IF(@@ERROR <> 0)
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
END
(注意,sqlcmd调用的脚本大多不包含transacions)问题是,如果被调用的脚本包含回滚事务,那么它也会回滚外部事务。内部脚本不包含命名事务,而且有太多的脚本可以重写每个要命名的事务。
是
下面的语句是原子操作吗?
UPDATE [table1]
SET column1=@val1, column2.WRITE(@val2, NULL, 0) WHERE table1_id=@id
或者应该将它放在事务中,以确保在出现错误的情况下不更新列或两个列都更新?
列的定义如下:
column1 int not null,
column2 varbinary(max) not null
我有以下代码:
class ServiceA {
def save(Object object) {
if (somethingBadComesBack) {
throw new CustomRuntimeException(data)
}
}
}
class ServiceB {
def serviceA
def save(Object object) {
try {
serviceA.save(object)
// do more stuff if good to go
我有2个存储过程,它将更新2个表并激活2个触发器。
CREATE PROCEDURE UP_CheckOut
@idBill INT,
@finalPrice INT
AS
UPDATE DBO.Bill
SET Status = N'Finished',
FinalPrice = @finalPrice
WHERE ID = @idBill
AND Status = N'Not Finished'
GO
CREATE PROCEDURE UP_ModifyBonusPoint_A
我创建了一个触发器
CREATE TRIGGER [CantDeleteStuff] ON [dbo].[Stuff]
INSTEAD OF DELETE
AS
BEGIN
ROLLBACK
UPDATE [dbo].[Stuff] SET [Deleted]=1 FROM DELETED WHERE [dbo].[Stuff].[Id] = DELETED.[Id]
END
GO
我认为它的意图很清楚。但是当我尝试删除一行时,我会得到错误。
事务在触发器中结束。批处理已被中止。
怎么修?
我正在使用后端的Server 2014在一些现有应用程序中工作。我发现提交事务的模式如下
USE AdventureWorks;
GO
BEGIN TRANSACTION;
GO
DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = 10;
DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = 11;
DELETE FROM HumanResources.JobCandidate WHERE JobCandidateID = 12;
GO
COMMIT
我在控制器中使用了DB::transaction函数,
public function store(){
$plant = new Plant;
DB::transaction(function()
{
Plant::create(request(['name','plant_code','place']));
});
}
我想知道我使用函数的方式是好的,我需要验证它是否正常工作?
回滚时发生错误:
Msg 6401,16级,状态1,过程our_trigger,第76行
无法回滚t1。没有找到该名称的事务处理或保存点。
下面是触发器中的SQL代码
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [DOCSADM].[our_trigger]
ON [DOCSADM].[PROFILE]
FOR UPDATE, INSERT
AS
DECLARE @DocSystemId AS INTEGER
DECLARE @docNumber AS INTEGER
DECLA