SQL 服务器搜索数据库对象 "on the fly" 具有本机 SSMS 功能/SSMS 提升

SQL Server Search Database Objects "on the fly" with Native SSMS Functionality / SSMS Boost

TLDR:我最终要寻找的是能够在 SQL 查询编辑器中突出显示一些文本(这将是部分对象名称),然后按键盘快捷键(例如 CTRL+5)这将根据匹配的突出显示的文本在当前数据库中搜索对象。然后在结果中找到对象,复制它(或别名版本),按 CTRL+R 关闭网格然后粘贴。然后继续编码(然后可能会在一分钟后再次编码)。


使用 SQL 查询编辑器在 SSMS 中编码/编写查询时,我经常发现自己在数据库中搜索要在当前查询中使用的对象。我用的是SSMS Boost,所以我的方法如下

  1. 打开一个新的 window (CTRL+N)
  2. 使用SSMS AutoReplace粘贴以下代码。 (光标在#所在的位置。)

    DECLARE @t nvarchar(100)
    SET @t = N'%#%'
    
    SELECT
        o.Type,
        o.Type_Desc,
          '['+SCHEMA_NAME(o.schema_id)+'].['+o.name+']' AS ObjectName,
    CASE WHEN Type IN (N'U') AND o.name LIKE N'%[_]%' THEN o.name + N' AS ' + STUFF(o.name, 1, CHARINDEX(N'_', o.name), N'') END AS Alias
    FROM sys.objects AS o
    WHERE o.name like @t
    AND RIGHT(REPLACE(o.name, N'sel', N''), 3) NOT IN (N'upd', N'del', N'ins', N'bdc')
    --AND Type  IN (N'U')
    ORDER BY o.name
    
  3. 键入或粘贴文本

  4. F5执行查询
  5. 从结果中复制对象名称以在查询中使用
  6. CTRL+F4
  7. 关闭window
  8. 在结果中粘贴 table(和别名)

我做起来很快,但我仍然觉得浪费了很多时间。


为了尝试解决此问题并增加 SSMS Boost 的功能,我尝试使用 宏功能

  1. 复制突出显示的文本 - Edit.Copy, (Global::Ctrl+C,Global::Ctrl+Ins)
  2. 打开一个新的 window - File.NewQuery, (Global::Ctrl+N)
  3. 运行 自动替换 - ???或者用另一种方法粘贴上面的SQL
  4. 粘贴文本 - Edit.Paste, (Global::Ctrl+V,Global::Shift+Ins)

由于似乎无法将参数/自由文本添加到宏中,我卡住了,不知道还能做什么。我尝试在 SSMS Boost Forums 上发帖,但没有得到太多回应。


我也尝试合并本地 SSMS 键盘快捷键,但没有成功。

当对象(视图或 table)有效时,以下 2 个查询与 SSMS 快捷方式配合使用效果很好。快捷方式似乎也有效,因为该功能允许将突出显示的文本添加到快捷方式代码的末尾 / SQL.

SELECT COUNT(*) AS [Count] FROM --to get a quick count of the number of records in a table
SELECT TOP 100 * FROM --to get a glimpse of the data in the highlighted table or view

最后,我研究了使用 SSMS 模板(这似乎是一个非常好的功能),但我不知道如何使用键盘快捷键即时使用它们。

这是一个使用 SSMS 键盘快捷键的解决方案,它在 SSMS 2016 中似乎对我有用。将以下内容分配给组合键(一长行):

EXEC('CREATE PROC #up_helpalias @t sysname AS SELECT o.Type, o.Type_Desc, ''[''+SCHEMA_NAME(o.schema_id)+''].[''+o.name+'']'' AS ObjectName, CASE WHEN Type IN (N''U'') AND o.name LIKE N''%[_]%'' THEN o.name + N'' AS '' + STUFF(o.name, 1, CHARINDEX(N''_'', o.name), N'''') END AS Alias FROM sys.objects AS o WHERE o.name like N''%'' + @t + ''%'' AND RIGHT(REPLACE(o.name, N''sel'', N''''), 3) NOT IN (N''upd'', N''del'', N''ins'', N''bdc'') ORDER BY o.name;DROP PROC #up_helpalias;');exec #up_helpalias  

它的工作原理是根据您的查询创建并执行一个临时存储过程 - 下面是一个更具可读性的语句定义版本。请注意,该过程包含在执行结束时自行删除的代码:

CREATE PROC #up_helpalias
    @t sysname
AS
BEGIN
    SELECT
    o.Type,
    o.Type_Desc,
        '['+SCHEMA_NAME(o.schema_id)+'].['+o.name+']' AS ObjectName,
    CASE WHEN Type IN (N'U') AND o.name LIKE N'%[_]%' THEN o.name + N' AS ' + STUFF(o.name, 1, CHARINDEX(N'_', o.name), N'') END AS Alias
    FROM sys.objects AS o
    WHERE o.name like N'%' + @t + '%'
    AND RIGHT(REPLACE(o.name, N'sel', N''), 3) NOT IN (N'upd', N'del', N'ins', N'bdc')
    ORDER BY o.name

    DROP PROC #up_helpalias
END

其次是:

exec #up_helpalias

它使用从键盘快捷键传入的值执行过程。

我们在 SSMSBoost 中实现了这一点:select Query Editor 中的任何字符串,然后按 Shift -F2。这将打开我们的 "Database orbject search" 对话框,由 selected 字符串过滤。

(抱歉,如果您没有在我们的论坛上回复,也许我们已经执行了您的建议而忘记回复您)