logo SQL Prompt教程 我也要发布文档

SQL语法提示工具SQL Prompt教程:使用SQL Prompt重构批处理或对象(下)


SQL Prompt是一款实用的SQL语法提示工具。SQL Prompt根据数据库的对象名称、语法和代码片段自动进行检索,为用户提供合适的代码选择。自动脚本设置使代码简单易读——当开发者不大熟悉脚本时尤其有用。SQL Prompt安装即可使用,能大幅提高编码效率。

点击下载SQL Prompt免费版

本教程演示了SQL Prompt如何帮助“小规模” SQL重构任务,该任务的范围通常仅限于您在本地工作的单批代码或代码对象。这些任务直接在SSMS查询窗口中执行,并且可以帮助您以各种方式重构代码,这些方式在测试存储过程和对存储过程进行故障排除时非常有用。本文主要是教程后半部分,内容紧接上文~

使用代码片段进行重构

SQL Prompt的许多内置代码片段都包含$ SELECTEDTEXT $占位符。如果您在查询窗口中突出显示任何代码并调用这些代码段之一,它将把选定的文本插入到代码段内的占位符中。例如,我们可以将任何选定的代码插入:

  • BEGIN…END块(通过调用be片段)

  • IF块(ifs

  • TRY…CATCH块(tc

  • CTE(cte

  • 创建视图(cv

  • 创建内联表值函数(citf

我将演示几个示例,并说明如何制作自己的代码片段,就像这些一样,您可以通过几次击键进行调用。

添加一个BEGIN…END

前面清单中第一行代码下的另一条绿色花样是另一个SQL Prompt“警告”,该代码提示其内置代码分析规则之一。在这种情况下,这是一种样式规则(ST003),建议将过程主体包含在中BEGIN…END中。

使用SQL Prompt重构批处理或对象

图5

这不是存储过程的要求,但是正如规则(ST003)中的说明告诉我们的那样,多行用户定义函数需要它,因此保持一致是一个很好的做法。无论如何,我认为一个BEGIN…END块有助于弄清楚什么是对象中的代码,哪些不是对象的代码。

要解决此问题,只需在过程中突出显示查询,然后从SQL Prompt的“操作”菜单中调用be片段即可。或者,对于BEGIN…END、 WHILE 和IF,您只需右键单击代码,然后从上下文菜单中选择“环绕声”(Ctrl-KCtrl-S)。

使用SQL Prompt重构批处理或对象

图6

现在,BAM,过程主体位于一个BEGIN...END块中。在进行此操作时,我还使用了“插入分号” 操作向该END语句添加了分号。

CREATE OR ALTER PROCEDURE Application.Cities$List
      @CityNameLike nvarchar(50) = '%', @CityNameUpperCaseFlag bit = 0
  AS
  BEGIN
      SELECT Cities.CityID,
             CASE WHEN @CityNameUpperCaseFlag = 1
                      THEN UPPER(Cities.CityName)
                  ELSE Cities.CityName
             END,
             Cities.Location
      FROM   Application.Cities
      WHERE  Cities.CityName LIKE @CityNameLike;
  END;

清单3

将查询重构为代码模块

SQL Prompt还可以轻松地以视图、内联表值函数或公用表表达式的形式将查询重构为可重用的逻辑。例如,突出显示清单4中的查询…

SELECT CustomerID,
         CustomerName,
         BillToCustomerID,
         CustomerCategoryID
  FROM   Sales.Customers;

清单4

并调用cv(创建视图)代码段,您的查询现在包含在视图定义的开始部分。

CREATE VIEW [schema].[view_name]
  --WITH ENCRYPTION, SCHEMABINDING, VIEW_METADATA
  AS
      SELECT CustomerID,
             CustomerName,
             BillToCustomerID,
             CustomerCategoryID
      FROM   Sales.Customers;
  -- WITH CHECK OPTION
  GO

清单5

这很好地提醒了视图定义的重要部分,并且在给它命名后就可以在这里正常工作,但是在大多数情况下,这只是一个基本的起点。另外,没有语法验证,因此您可以很高兴地调用cv片段将清单6转换为视图,即使它不会编译,因为没有变量声明,即使有,也没有变量在视图中允许。

SELECT CustomerID,
         CustomerName,
         BillToCustomerID,
         CustomerCategoryID
  FROM   Sales.Customers
  WHERE  @CustomerId = 1;

清单6

相反,您可能需要使用“创建内联表函数”(citf)代码段。

CREATE FUNCTION [schema].[function_name]
      (@parameter_name AS INT)
  RETURNS TABLE
  --WITH ENCRYPTION|SCHEMABINDING, ...
  AS
  RETURN ( SELECT CustomerID,
                  CustomerName,
                  BillToCustomerID,
                  CustomerCategoryID
           FROM   Sales.Customers
           WHERE  @CustomerId = 1; )
  GO

清单7

同样,这是创建函数的一个有用的开始,特别是因为我经常忘记创建任何类型函数的语法,但是当然,如果需要,您仍然需要处理@CustomerId变量并将其作为参数。

使用自定义片段进行重构

您可以轻松构建自己的代码片段来重构一段代码。例如,我经常需要做的一件事就是使用多行注释符号注释掉大块代码。

这是一个非常简单的自定义代码片段。要创建它,只需浏览SQL Prompt | Snippet Manager…| New…,为代码段添加一个初始名称和说明,然后输入代码段代码。创建此代码后,我只需要突出显示要注释掉的块,从“提示操作”列表中选择“co”,文本将被包含在注释中,我还将看到谁注释掉了文本,并且什么时候。

使用SQL Prompt重构批处理或对象

图7

对于这样的代码段,我还可以看到很多其他用途,例如变量声明(我创建了多少次@msg保存一条THROW语句的消息?)

内联执行:重构以进行测试

提示:在查询窗口中,突出显示存储过程的EXEC命令、标量函数或sp_executesql函数,然后从右键单击内容菜单中选择Inline Exec。SQL Prompt用等效的内联代码替换它。

假设我们要测试应用程序Cities$List存储过程,因此我们对该过程的调用进行了编码,如下所示:

EXECUTE Application.Cities$List @CityNameLike = 'Nash%'

清单8

这会返回大量数据,并且您想更深入地看一下代码,因为感觉有些不对劲。突出显示Cities$List,右键单击并选择Inline Exec。该过程的参数将被转换为变量,并将使用您传入的变量值(或者默认值,如果您已经省略了一个参数,就像我一样),如清单9所示。

DECLARE @CityNameLike1 nvarchar(50), @CityNameUpperCaseFlag1 bit;
  SET @CityNameLike1 = 'Nash%';
  SET @CityNameUpperCaseFlag1 = NULL;
  BEGIN
      SELECT Cities.CityID,
             CASE WHEN @CityNameUpperCaseFlag1 = 1
                      THEN UPPER(Cities.CityName)
                  ELSE Cities.CityName
             END,
             Cities.Location
      FROM   Application.Cities
      WHERE  Cities.CityName LIKE @CityNameLike1;
  END;

清单9

这可能不是要做的最复杂的重构,但这是一项常见而繁琐的任务,尤其是当您有很多参数并且一个或多个具有默认值时。

摘要

SQL Prompt包含许多不错的工具,可以帮助您重构代码,这些工具都很小,很容易每天使用。作为程序员,有时很难不仅仅依赖于查找和替换,但是在SQL Prompt中,我发现更多类似这些工具的工具时,在做事不那么简单的情况下,我发现它们越有用。

本教程内容就是这样了,感兴趣的朋友可以下载SQL Prompt尝试一下哦~

相关内容推荐:

SQL语法提示工具SQL Prompt教程:使用SQL Prompt重构批处理或对象(上)

SQL Prompt系列教程>>>


想要购买SQL Prompt正版授权,或了解更多产品信息请点击“咨询在线客服”

Zend-Studio-640×220.png