Sql server 然后运行代码。

Sql server 然后运行代码。,sql-server,kill-process,Sql Server,Kill Process,您无法避免回滚。你应该尽量避免启动它。我知道有3个相同代码的副本在运行吗 也许您可以在运行它之前使用信号量检查。例如: 在运行30h代码之前,检查临时表是否存在。如果表存在,则不运行代码,否则创建表,然后运行代码。如果要终止所有进程,最快的方法可能是: ALTER DATABASE [Data base name] SET SINGLE_USER WITH ROLLBACK IMMEDIATE 之后,您可能希望返回到以前的数据库状态: ALTER DATABASE [Data base nam

您无法避免回滚。你应该尽量避免启动它。我知道有3个相同代码的副本在运行吗

也许您可以在运行它之前使用信号量检查。例如:


在运行30h代码之前,检查临时表是否存在。如果表存在,则不运行代码,否则创建表,然后运行代码。

如果要终止所有进程,最快的方法可能是:

ALTER DATABASE [Data base name] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
之后,您可能希望返回到以前的数据库状态:

ALTER DATABASE [Data base name] SET MULTI_USER

这将在不重新启动服务器的情况下终止所有进程。如果您想终止一组特定进程,而“kill@spid”不起作用,我只能建议您使用DAC连接,看看会发生什么。

如果您想终止所有进程,最快的方法可能是:

ALTER DATABASE [Data base name] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
之后,您可能希望返回到以前的数据库状态:

ALTER DATABASE [Data base name] SET MULTI_USER


这将在不重新启动服务器的情况下终止所有进程。如果您想终止一组特定进程,而“kill@spid”不起作用,我只能建议您使用DAC连接,看看会发生什么。

但这已经持续了24小时@迈克:好吧,如果在你取消它之前它做了30个小时的工作,那么你应该预计至少需要30个小时来撤销它。@AaronBertrand-虽然它似乎一直在等待
OLEDB
等待
23.8
小时并计数。@MartinSmith很有趣。这是一个链接服务器查询吗?@AaronBertrand-根据问题本身下的注释,它使用了
OPENROWSET
和文本驱动程序。但这已经持续了24小时@迈克:好吧,如果在你取消它之前它做了30个小时的工作,那么你应该预计至少需要30个小时来撤销它。@AaronBertrand-虽然它似乎一直在等待
OLEDB
等待
23.8
小时并计数。@MartinSmith很有趣。这是一个链接服务器查询吗?@AaronBertrand-根据问题本身下的注释,它使用了
OPENROWSET
和文本驱动程序。原始查询运行了30个小时。它实际上在做什么?它是一个查询,使用openquery从excel文件中读取数据并将其插入临时表中。excel文件大约有30行,因此非常小。我总是运行这个查询,但从来没有花很长时间。即使我只是运行一个查询来读取文件中的数据,它也将花费永远的时间。从OPENROWSET('MSDASQL',Driver={Microsoft文本驱动程序(*.txt;*.csv)};DBQ=E:\UploadFiles\','SELECT*FROM new.csv')中选择*是否
SELECT*FROM sys.dm_os_waiting_任务,其中session_id=61
返回任何内容?是的。它返回任务地址和85753828的等待时间,以及什么是等待类型?运行30小时的原始查询。它实际上在做什么?它是一个查询,使用openquery从excel文件中读取数据并将其插入临时表中。excel文件大约有30行,因此非常小。我总是运行这个查询,但从来没有花很长时间。即使我只是运行查询从文件中读取数据,也需要永远。从OPENROWSET('MSDASQL',Driver={Microsoft文本驱动程序(*.txt;*.csv)};DBQ=E:\UploadFiles\','SELECT*FROM new.csv')中选择*是否
SELECT*FROM sys.dm_os_waiting_任务,其中session_id=61
返回任何内容?是的。它返回任务地址和等待时间85753828,等待类型是什么?此命令仍将尝试终止相关会话。这比在一个循环中执行一系列KILL命令更容易,但这相当于一件事,并且不能神奇地杀死正在执行回滚的会话。这是有意的,是为了保护您的数据库——这就是为什么停止服务是如此危险的方法。当我试图执行第二个查询时,我得到了以下错误。Msg 102,15级,状态6,第1行“多用户”附近的语法不正确。谢谢Martin。我用错数据库了。因此,现在我在我用来创建临时表的数据库上执行了第一个查询,但这需要一段时间。这是预期的吗?还是应该很快改变?谢谢,就像我说的,这个命令只有杀死所有相关进程才能完成。这与您一遍又一遍地运行kill没有什么不同-它必须等待处于回滚/取消状态的一个完成回滚或取消。@Mike-我刚才告诉您将数据库恢复到多用户模式的正确语法。我猜运行带有立即回滚功能的
SET SINGLE_USER
仍需无限期地等待挂起进程。此命令仍将尝试终止相关会话。这比在一个循环中执行一系列KILL命令更容易,但这相当于一件事,并且不能神奇地杀死正在执行回滚的会话。这是有意的,是为了保护您的数据库——这就是为什么停止服务是如此危险的方法。当我试图执行第二个查询时,我得到了以下错误。Msg 102,15级,状态6,第1行“多用户”附近的语法不正确。谢谢Martin。我用错数据库了。因此,现在我在我用来创建临时表的数据库上执行了第一个查询,但这需要一段时间。这是预期的吗?还是应该很快改变?谢谢,就像我说的,这个命令只有杀死所有相关进程才能完成。这与您一遍又一遍地运行kill没有什么不同-它必须等待处于回滚/取消状态的一个完成回滚或取消。@Mike-我刚才告诉您将数据库恢复到多用户模式的正确语法。我猜运行带有立即回滚功能的
SET SINGLE_USER
仍然需要无限期地等待挂起进程。
ALTER DATABASE [Data base name] SET MULTI_USER