相关疑难解决方法(0)

如何在sql server中提交和回滚事务?

我有一个巨大的脚本用于创建表和从一个服务器移植数据.所以这个剧本基本上有 -

  1. 为表创建语句.
  2. 插入以将数据移植到这些新创建的表.
  3. 为存储过程创建语句.

所以我有这个代码,但它基本上不起作用@@ ERROR总是零我认为..

BEGIN TRANSACTION
--CREATES
--INSERTS
--STORED PROCEDURES CREATES
    -- ON ERROR ROLLBACK ELSE COMMIT THE TRANSACTION
    IF @@ERROR != 0
        BEGIN

            PRINT @@ERROR
                      PRINT 'ERROR IN SCRIPT'
            ROLLBACK TRANSACTION
            RETURN
        END
    ELSE
    BEGIN
        COMMIT TRANSACTION
        PRINT 'COMMITTED SUCCESSFULLY'
    END
    GO
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我写一个事务,基本上会回滚错误并提交,如果一切都很好.. 我可以在这里使用RaiseError ..

transactions sql-server-2008

15
推荐指数
1
解决办法
15万
查看次数

可以真正取消/杀死sql server查询吗?

我想让用户能够取消正在运行的查询.查询真的很慢.(查询优化除此之外.)这主要是出于好奇心.

MSDN说:

如果没有什么可以取消,则不会发生任何事情 但是,如果正在处理命令,并且尝试取消失败,则不会生成异常.

  • Cmd - SqlCommand
  • DA - DataAdapter
  • Conn - SqlConnection
  • CurrentSearch - 线程
  • LongQuery - Singleton

这就是我所拥有的:

var t = new Thread(AbortThread);
t.Start();

void AbortThread()
{
    LongQuery.Current.Cmd.Cancel();
    LongQuery.Current.Cmd.Dispose();
    LongQuery.Current.DA.Dispose();
    LongQuery.Current.Conn.Close();
    LongQuery.Current.Conn.Dispose();
    LongQuery.Current.Cmd = null;
    LongQuery.Current.DA = null;
    LongQuery.Current.Conn = null;
    CurrentSearch.Abort();
    CurrentSearch.Join();
    CurrentSearch = null;
}
Run Code Online (Sandbox Code Playgroud)

我注意到这CurrentSearch.Abort()是阻塞,这就是为什么我把它包装在一个线程中,这可能意味着线程仍在工作.

最后,除了这个我可以做什么来取消查询?实际上是否可以从.NET取消这么长的查询?

c# sql-server

13
推荐指数
1
解决办法
3110
查看次数

标签 统计

c# ×1

sql-server ×1

sql-server-2008 ×1

transactions ×1