厌倦了键入诸如“SELECT TOP 10 * FROM”之类的 SQL 脚本和其他类似脚本。如何在 SSMS 中创建别名/快捷方式?

Posted

技术标签:

【中文标题】厌倦了键入诸如“SELECT TOP 10 * FROM”之类的 SQL 脚本和其他类似脚本。如何在 SSMS 中创建别名/快捷方式?【英文标题】:Tired of typing SQL scripts like "SELECT TOP 10 * FROM" and other similar scripts. How to create an alias/shortcut in SSMS? 【发布时间】:2020-10-24 11:59:43 【问题描述】:

在对我的工作进行大量研究的同时,我一直在编写通用脚本,例如“SELECT TOP 10 * FROM”等。

有没有办法让我编写类似 sn-p 的东西,这样当我输入“ss”+空格/制表符时,它会插入“SELECT TOP 10 * FROM”脚本?

我注意到我经常使用许多脚本,我想为它们创建一些别名...

【问题讨论】:

你可以使用函数(sql server)...参数化表名。如何创建函数去docs.microsoft.com/it-it/sql/t-sql/statements/… SSMS 确实支持代码片段,它允许您在命令中插入预定义(可选参数化)的代码块。但它不支持它们的键盘快捷键(尽管它在 sn-p 文件的规范中)。 docs.microsoft.com/en-us/sql/ssms/scripting/…。是此功能的文档,如果您有前 10 项以外的要求,它可能会更有用 * SQL Prompt 来自 Redgate。 是的@TGnat 一些供应商工具可以做到这一点。我们使用您指定的竞争对手。我从来没有使用过这个功能 @TGnat,感谢您的提示。我实际上使用 RedGate,但不知道 SQL Prompt。发现添加一个 sn-p 非常容易。谢谢! 【参考方案1】:

虽然您可以创建代码 sn-p,但选择 sn-p 是很烦人的。

它仍然需要:CTRL-K CTRL-X M <tab> S <tab> 才能获得:

SELECT TOP 10 * FROM Table1 并能够输入所需的表名。

sn-p:

<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets  xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<_locDefinition xmlns="urn:locstudio">
    <_locDefault _loc="locNone" />
    <_locTag _loc="locData">Title</_locTag>
    <_locTag _loc="locData">Description</_locTag>
    <_locTag _loc="locData">Author</_locTag>
    <_locTag _loc="locData">ToolTip</_locTag>
</_locDefinition>
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>Select</Title>
                        <Shortcut></Shortcut>
            <Description>SELECT TOP 10 * FROM ....</Description>
            <Author>?</Author>
            <SnippetTypes>
                <SnippetType>Expansion</SnippetType>
            </SnippetTypes>
            <Shortcut>select</Shortcut>
        </Header>
        <Snippet>
            <Declarations>
                                <Literal>
                                    <ID>TableName</ID>
                                    <ToolTip>Name of the table</ToolTip>
                                    <Default>Table1</Default>
                                </Literal>
            </Declarations>
            <Code Language="SQL"><![CDATA[
SELECT TOP 10 * FROM  $TableName$
]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>

将此保存到(即)“select.sn-p”,并在“工具/代码 Snipper Manager”下的 SSMS 中导入

我不清楚&lt;Shortcut&gt;select&lt;/Shortcut&gt; 部分的价值...

根据下一个站点,快捷方式是 2013 年的“无法修复”: https://dba.stackexchange.com/questions/166432/shortcuts-for-code-snippets

【讨论】:

我过去使用过 sn-p,但我无法将此脚本从 sql server 传输到其他工具。 AutoHotkey 很好地实现了这一目标。【参考方案2】:

您可以离开 SSMS 并依赖已设置的热键(无论您是否在 SSMS 中,它都会触发)。 Autohotkey (https://www.autohotkey.com/) 可用于此实现 https://www.autohotkey.com/docs/Tutorial.htm#s12 描述了如何实现您的确切场景。

【讨论】:

【参考方案3】:

不,在 SQL Server 中没有办法做到这一点(我不认为在任何其他数据库中)。

基本上,您正在寻找某种宏预处理,这不是 SQL 语言的一部分,尽管某些数据库可能在其脚本语言中支持它,或者某些工具可能支持它。

嗯。 . .我突然想到您可以使用存储过程。如果你想写:

exec top10 'tablename';

然后将过程定义为:

create procedure top10 (@t nvarchar(max)) as
begin
    declare @sql nvarchar(max);
    set @sql = 'select top (10) * from [' + @t + ']';
    exec sp_executesql @sql;
end;

【讨论】:

SQL 宏从 20c 开始成为 Oracle 的一部分,它们也被向后移植到 19.7。但是,我将此要求解释为希望由客户端代码编辑器(在本例中为 SSMS)实现的东西。 “开始”之前缺少“AS”... @Luuk 。 . .谢谢。【参考方案4】:

我为此目的使用了 AuthoHotkey,例如我使用 ssf 选择 * from。这是一个例子。

:oc:ssf::
SendInput,HomeSELECT TOP (100) * FROM  End WITH (NOLOCK)^Left 4Left 1
return

【讨论】:

以上是关于厌倦了键入诸如“SELECT TOP 10 * FROM”之类的 SQL 脚本和其他类似脚本。如何在 SSMS 中创建别名/快捷方式?的主要内容,如果未能解决你的问题,请参考以下文章

我厌倦了错误处理

Zend ErrorController 视图问题

我厌倦了 Redux,那就造个轮子 Rectx:第三集

厌倦了我的 Rails 应用程序的 Heroku SSH 混乱

将前端连接到后端

想念周鸿祎?其实是网民厌倦了炒作和谄媚