我有一个存储过程,其中只执行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
我有一个包含id和name列的表。
START TRANSACTION;
UPDATE Test SET name='test' where id=1;
SELECT ROW_COUNT() INTO @affected_rows;
IF (@affected_rows > 0) THEN
COMMIT;
ELSE
ROLLBACK;
END IF
它似乎是在返回一个错误
您的SQL语法出现错误;请检查与您的MySQL服务器版本对应的手册,以获得在第1行“IF (affected_rows > 0)然后提交”附近使用的正确语法。
目前正在运行
我有以下MYSQL查询:
START TRANSACTION;
SELECT sport_id INTO @a FROM sports WHERE sport_id = 2 FOR UPDATE;
UPDATE sports SET sport_name = 'Table Tennis' WHERE sport_id = @a;
if (@a > 1) then
COMMIT;
ELSE
ROLLBACK;
END IF;
问题是它在if语句处返回一个错误:
#1064 -您的SQL语法出现了错误;请检查与您的MySQL服务器版本对应的手册,以获得
如果满足某个条件,我就不希望插入(事务应该回滚)。我可以在应用程序代码中编写这个逻辑,但是由于某种原因,它必须用MySQL本身编写(假设用不同语言编写的客户机将插入到这个MySQL InnoDB表中),这是一个单独的讨论。
表定义:
CREATE TABLE table1(x int NOT NULL);
触发器看起来如下所示:
CREATE TRIGGER t1 BEFORE INSERT ON table1
FOR EACH ROW
IF (condition) THEN
NEW.x = NULL;
END IF;
END;
我猜它也可以写成(未经测试):
CREATE T
我在DAO层中有调用Oracle数据库中存储过程的方法:
@Override
public void deleteNode(Integer nodeId) {
SqlParameterSource in = new MapSqlParameterSource()
.addValue("nodeId",nodeId)
.addValue("user", "DUMMY");
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(ebDat
我有这个SQL代码来检查一些参数,如果无效将引发错误,我还希望将错误记录插入到错误表中。问题是,如果发生错误,整个事务将被回滚,包括错误记录,我希望回滚除错误记录之外的整个事务。
我尝试创建一个单独的事务,但没有成功地提交它。
IF @Input IS NULL
BEGIN
insert into [dbo].Errors('Field1') values ('Input is null')
RAISERROR ('some message', 16, 1)
RETURN -1
END
有
这是我的第一篇Stack Overflow帖子!社区得到了很大的帮助!
我有一个90K行的CSV,我正试图通过一个带有CSV的临时表插入到一个表中,如下所示:
CREATE TEMPORARY TABLE temp_product like product;
LOAD DATA LOCAL INFILE "myfile.csv"
...
但我正试图通过一个过程来完成插入和一些额外的操作,该过程包含一个事务和一个退出处理程序,以防任何操作失败或抛出警告:
CREATE PROCEDURE update_products ()
BEGIN
DECLARE EXIT HAND
我们正在开发一个应用程序,有时需要从SQL表中删除(一些)条目,并将它们替换为一个新的行列表。在我们的应用程序中,逻辑是:
Delete relevant_entries using delete_stored_procedure
For Each new_entry in new_entries
Insert new_entry using insert_stored_procedure
这种逻辑是可行的,但有一个陷阱。如果DELETE工作,但是其中一个插入失败了怎么办?我们需要能够将数据库恢复到删除表行和插入任何先前条目之前的状态。有没有办法做到这一点,只恢复这些事情,而不影响任何其
我正在尝试在MySql中创建一个事务,该事务将在事务期间发生异常时回滚。类似地,在存储过程中使用以下内容。
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
这可以在不编写存储过程的情况下完成吗?例如,下面的代码片段应该回滚第一个插入,因为第二个插入将失败。
START TRANSACTION;
INSERT INTO mytable VALUE 'foo1',2,'foo3','foo4'
INSERT INTO mytable VALUE 'foo1','foo2'
有时我会看到下面的代码片段。begin try什么时候需要if @@trancount > 0?他们两个?或者这是一种安全的方式(最佳实践),总是检查它,以防它在检查之前回滚?
begin tran
begin try
... just several lines of sql ...
if @@trancount > 0 commit tran
end try
begin catch
if @@trancount > 0 rollback tran
end catch
输出仅显示从7点到11点59的时间。应该是从中午到午夜。这是一个逻辑错误,但我找不到纠正它的方法。
#include <iostream>
using namespace std;
int main ()
{
int hour,min;
for (hour=0;hour<=11;hour+=1)
{
for (min=0;min<=59;min++)
{
if (min<10)
cout<<hour<<":
考虑一个场景。我已经在INSERT操作上创建了触发器的表T1。和存储过程如下所示。
//StoredProcedure.sql
BEGIN TRANSACTION;
...
...
INSERT INTO TABLE T1
/* Trigger will be executed on record insertion in Table T1 */
.....
.....
.....
.....
Consider some error here...
.....
.....
COMMIT TRANSACTION;
.....
.....
ROLLBACK TRANSACTION;
On Err
我在一个文件中有sql,其中包含许多语句。如何让mysql在不执行的情况下检查sql的合法性? 就像这样 mysql --check-only input.sql 至少,我需要检查语法。 理想情况下,它还会尝试插入数据和检查约束。基本上将整个文件包装在一个隐式事务中,该事务会自动回滚。 mysql CLI可以做到这一点吗?
这是我的c#代码。
protected void btnSkipSubmit_Click(object sender, EventArgs e)
{
myConnection newobj = new myConnection();
IdGen newid = new IdGen();
Patient p = new Patient();
p.PatientName = "D"; //assigning values of the controls to object data members
p.F_H_GName =
我又一次感到困惑。
昨晚在一些大型查询中,服务器崩溃了。早上重启后,MySQL进入恢复模式。我需要关闭MySQL服务,它正在等待.如日志所述,我假设未提交事务的后台回滚,但它已经在热服务器上停留了9个多小时,看不到尽头。
当服务重新启动时,进程能否安全地中断并在后台恢复?还是我们要等着喘息。
任何输入或想法(甚至是关于正在发生的事情的信息)都将是非常有用的。提前,谢谢。
我们正在运行MySQL 5.5。
下面是日志输出:
140930 9:04:30 InnoDB: Starting an apply batch of log records to the database...
Inno