dbForge Studio for SQL Server为有效的探索、分析SQL Server数据库中的大型数据集提供全面的解决方案,并设计各种 表以帮助作出合理的决策。
dbForge Studio for SQL Server最新试用版
有时人们在 SQL Server打开的事务处理到一半的情况下会忘记它们。这是常规数据库开发中经常遇到的情况。比如当使用SQL Server Management Studio运行脚本和使用BEGIN TRANSACTION语句启动显式事务时,却在事务中间取消了该批处理而没有发出COMMIT或ROLLBACK语句来完成事务并且使得交易保持打开状态。
- 首先,我们创建两个表:一个表用于保存和分析有关当前未结交易的信息,第二个表将从第一个表交易中选择的归档以进行进一步分析。
- 收集有关没有查询的事务及其会话的信息(在一定时间段T内已启动事务且未完成的事务)。
- 更新包含步骤1中当前活动事务列表的表(如果获得了活动请求的未完成的事务,则不再认为它丢失,必须将其从表中删除)。
- 确定要终止的会话(一个任务框在步骤1的表中至少有一个未完成的事务,并且该任务框没有查询在运行)。
- 存档要删除的数据(有关将被杀死的事务,会话和连接的信息)。
- 终止会话。
- 删除已处理的条目以及那些不能删除的条目,这些条目已经存在于步骤1中很长时间了。
下面演示如何实现该算法第1步,我们将演示如何创建表以列出和归档未完成的事务。
创建一个表以列出并检查丢失的交易
应用代码格式
借助dbForge SQL Complete,我们可以快速轻松地创建一个表来存储有关当前丢失的交易的信息。
1.该工具通过根据T-SQL代码的多个嵌入式提示来帮助您加快常规编码的速度。只需单击几下即可创建表格。


图2.小写命令转换为大写这样,我们继续完善表创建脚本:
SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [srv].[SessionTran]([SessionID] INT NOT NULL,[TransactionID] BIGINT NOT NULL,[CountTranNotRequest] TINYINT NOT NULL,[CountSessionNotRequest] TINYINT NOT NULL,[TransactionBeginTime] DATETIME NOT NULL,[InsertUTCDate] DATETIME NOT NULL,[UpdateUTCDate] DATETIME NOT NULL, CONSTRAINT [PK_SessionTran] PRIMARY KEY CLUSTERED([SessionID] ASC,[TransactionID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 95) ON [PRIMARY]) ON [PRIMARY]GOALTER TABLE [srv].[SessionTran] ADD CONSTRAINT [DF_SessionTran_Count] DEFAULT ((0)) FOR [CountTranNotRequest]GOALTER TABLE [srv].[SessionTran] ADD CONSTRAINT [DF_SessionTran_CountSessionNotRequest] DEFAULT ((0)) FOR [CountSessionNotRequest]GOALTER TABLE [srv].[SessionTran] ADD CONSTRAINT [DF_SessionTran_InsertUTCDate] DEFAULT (getutcdate()) FOR [InsertUTCDate]GOALTER TABLE [srv].[SessionTran] ADD CONSTRAINT [DF_SessionTran_UpdateUTCDate] DEFAULT (getutcdate()) FOR [UpdateUTCDate]GO
在此脚本中:
1)用SessionID 标识一个会话
2)用TransactionID标识丢失的交易
3)用CountTranNotRequest代表交易记录为丢失的次数
4)用CountSessionNotRequest代表将会话记录为没有活动查询并包含丢失的事务的次数
5)用TransactionBeginTime是指丢失交易的开始日期和时间
6)用InsertUTCDate 标识创建记录的日期和时间(UTC)
7)用UpdateUTCDate 标识记录更新的日期和时间(UTC)。
如何使用SQL Complete格式化文档

图3. SQL Complete菜单中的Format Document命令
格式化之前,脚本如下所示:
create table [srv].[SessionTran]([SessionID] int not null, [TransactionID] bigint not null, [CountTranNotRequest] tinyint not null, [CountSessionNotRequest] tinyint not null,[TransactionBeginTime] datetime not null, [InsertUTCDate] datetime not null, [UpdateUTCDate] datetime not null, constraint [PK_SessionTran] primary key clustered ([SessionID] asc, [TransactionID] asc) with (pad_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on, fillfactor = 95) ON [PRIMARY]) on [PRIMARY]GO
以下是应用格式后获得的脚本:
CREATE TABLE [srv].[SessionTran] ([SessionID] INT NOT NULL ,[TransactionID] BIGINT NOT NULL ,[CountTranNotRequest] TINYINT NOT NULL ,[CountSessionNotRequest] TINYINT NOT NULL ,[TransactionBeginTime] DATETIME NOT NULL ,[InsertUTCDate] DATETIME NOT NULL ,[UpdateUTCDate] DATETIME NOT NULL ,CONSTRAINT [PK_SessionTran] PRIMARY KEY CLUSTERED ([SessionID] ASC, [TransactionID] ASC)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 95) ON [PRIMARY]) ON [PRIMAGO
采用以下方法我们可以看出一半的差异:
- 采用缩进的方法
- T-SQL关键字大写
- 在每个列名称之前添加了换行符。
这大大提高了代码的可读性和可理解性,从而导致更准确的感知和决策。
将格式应用于外部文档
SQL Complete工具还允许仅将格式应用于脚本的选定片段。请注意,只有在使用鼠标或光标选择要格式化的片段之后,才会启用“ 格式选择”选项。

图4. SQL Complete菜单中的Format Selection命令
下图显示了格式化之前的脚本片段。

图5.应用格式化之前的代码片段
研究下图,查看格式化后的代码片段外观。

图6.格式化的代码片段
在SQL格式化功能也应该被提及。借助它的帮助,您可以无缝格式化先前编写的脚本。

图7. SQL Formatter命令
从“ SQL完整”菜单中选择“ SQL格式化程序”命令后,将出现用于选择格式化模式的窗口。您可以选择格式化选定文件或特定文件夹中的所有文件的格式。在我们的示例中,我们选择Files。单击下一步按钮继续。

图8. SQL Formatter向导现在,您需要选择要格式化的文件。

图9.添加文件以格式化编译好要格式化的文件列表后,单击“ 格式”按钮。

图10.开始格式化过程因此,启动了格式化。

图11.格式化文件格式化过程完成后,将出现一个窗口,其中显示了已修改的文件数,并且这些文件在SQL Server Management Studio中打开。

图12. SQL Formatter中的Completion窗口以同样的方式,我们可以重构Scripts目录中所有文件的代码。要格式化指定文件夹中的所有文件,请在“ SQL Formatter向导”中选择“目录”选项。

图13. SQL Formatter向导中的Directories选项选择目录模式后,单击下一步按钮继续。在下一个窗口中,单击添加按钮以选择所需的文件夹。值得一提的是,在“ SQL Formatter向导”中,您可以指定要格式化的文件扩展名,还可以选择在格式化后保持修改后的文件打开并包含子文件夹。

图14. SQL Formatter向导的Folder列表窗口在这种情况下,格式化过程完成后,已修改的文件也会在SSMS中打开。

图15. SQL Formatter中的Completion窗口请注意,默认情况下,这些文件不会保存,而是以修改后的格式打开。如果要更改此设置,则需要清除“ 格式化后保持打开的已修改文件 ”复选框。取消选中该复选框后,修改后的文件将不会在Management Studio中打开,并且更改将立即应用并保存。
如果你对我们的产品感兴趣或者有任何疑问,欢迎咨询在线客服>>
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!