具有本机SSMS功能/ SSMS增强功能的“动态”SQL Server搜索数据库对象

时间:2017-01-26 15:42:55

标签: sql-server sql-server-2008 ssms

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

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

  1. 打开一个新窗口(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. 关闭窗口
  8. 将表格(和别名)粘贴到结果
  9. 我很快就做到了这一点,但我仍觉得浪费了相当多的时间。

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

    1. 复制突出显示的文本 - Edit.Copy,(Global :: Ctrl + C,Global :: Ctrl + Ins)
    2. 打开一个新窗口 - File.NewQuery,(Global :: Ctrl + N)
    3. 运行自动重置 - ???或者使用另一种粘贴上述SQL的方法
    4. 粘贴文本 - Edit.Paste,(Global :: Ctrl + V,Global :: Shift + Ins) SSMS Boost Macro
    5. 由于似乎没有能力将参数/自由文本添加到宏中,我陷入困境,无法弄清楚还有什么要做。我尝试在SSMS Boost Forums发帖,但我没有得到太多回应。

      我还尝试合并原生SSMS键盘快捷键而没有任何成功。 SSMS keyboard shortcuts

      当对象(视图或表)有效时,以下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模板(这似乎是非常好的功能),但我无法弄清楚如何使用键盘快捷键动态使用它们。

2 个答案:

答案 0 :(得分:1)

这是一个使用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

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

答案 1 :(得分:1)

我们已在 SSMSBoost 中实现了此功能:在查询编辑器中选择任意字符串,然后按 Shift-F2 。这将打开我们的“数据库对象搜索”对话框,并按选定的字符串过滤。

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