Sql server (我计划删除哪些记录,以确保联接按我认为的方式工作)

Sql server (我计划删除哪些记录,以确保联接按我认为的方式工作),sql-server,tsql,optimization,keyboard-shortcuts,Sql Server,Tsql,Optimization,Keyboard Shortcuts,运行此代码时,首先运行select以确保其正确性,然后注释掉select行并取消注释删除或更新部分。通过这种方式,您不会在检查之前意外运行删除或更新。此外,还可以避免忘记注释掉select导致更新更新数据库表中的所有记录的问题,如果使用此语法并取消select的注释以运行它,则可能会发生这种情况: select t1.field1,t2.field2 update t set field1 = t2.field2 --select t1.field1,t2.field2 from mytab

运行此代码时,首先运行select以确保其正确性,然后注释掉select行并取消注释删除或更新部分。通过这种方式,您不会在检查之前意外运行删除或更新。此外,还可以避免忘记注释掉select导致更新更新数据库表中的所有记录的问题,如果使用此语法并取消select的注释以运行它,则可能会发生这种情况:

select t1.field1,t2.field2
update t
set field1 = t2.field2 
--select t1.field1,t2.field2
from  mytable t1
join myothertable t2 on t1.idfield =t2.idfield
where t2.field1 >10

从上面的示例中可以看到,如果取消对select的注释而忘记对其重新注释,那么您只需更新整个表,然后在您认为只需运行更新时运行select。本周有人在我的办公室里这样做,这样所有客户中只有一个人可以登录到客户网站。因此,请避免这样做。

社区拥有的wiki答案-请随意编辑或添加评论:

键盘快捷键

  • F5、CTRL+E或ALT+X-执行当前选定的TSQL代码
  • CTRL+R–显示/隐藏结果窗格
  • CTRL+N–打开新的查询窗口
  • CTRL+L–显示查询执行计划
编辑快捷方式

  • CTRL+K+C和CTRL+K+U-注释/取消注释选定的代码块(由未经许可的用户建议)
  • CTRL+SHIFT+U和CTRL+SHIFT+L-将所选文本更改为大写/小写
  • SHIFT+ALT+选择文本-选择/剪切/复制/粘贴矩形文本块
插件

  • -智能感知(Galwegian建议)
  • -TSQL的格式(由Galwegian建议)
  • -开源格式外接程序
其他提示

  • 使用逗号前缀样式(由Cade Roux建议)
  • 使用键盘加速器(kcrumley建议)
有用的链接

+1用于SQL提示符

一些我想我从未见过的非常简单的东西——它将适用于几乎任何SQL环境(甚至其他语言):

经过12年的SQL编码,在一些SSMS生成的代码中看到逗号前缀样式后,我最近变成了一个转换为逗号前缀样式的人,我发现它非常有效。我很惊讶我以前从未见过这种风格,尤其是因为它极大地提高了我的工作效率

SELECT
t.a
,t.b
,t.c
,t.d
FROM t
它使编辑选择列表、参数列表、按顺序列表、按组列表等变得非常容易。我发现,在剪切和粘贴操作后,我花更少的时间在列表末尾添加和删除逗号-我想这会更容易,因为您几乎总是在末尾添加内容,并使用后缀逗号,这需要您进一步移动光标


试试看,你会惊讶的——我知道我是。

键盘加速器。一旦你弄清楚你经常写什么样的查询,就可以编写实用程序存储过程来自动完成任务,并将它们映射到键盘快捷键。例如,讨论了如何避免每次只想快速查看某个表中的示例数据时键入“selecttop10*fromsomebigtable”。我得到了这个过程的一个扩展版本,映射到CTRL+5。
我还有一些:

  • CTRL+0:快速编写表数据、过程、自定义项或视图定义的脚本
  • CTRL+9:查找名称包含给定字符串的任何对象(例如,当您知道名称中有一个带有“Option”的过程,但不知道其名称以什么开头时)
  • CTRL+7:查找代码中包含给定字符串的任何进程、自定义项或视图
  • CTRL+4:查找具有给定名称的列的所有表

  • 。。。还有一些现在还没想到的。其中一些事情可以通过SSMS中现有的接口来完成,但是SSMS的窗口和小部件的加载速度可能会有点慢,特别是当您在互联网上查询服务器时,我更喜欢不用把手从键盘上拿下来。

    F5运行当前查询是一个轻松的胜利,之后,通用MS编辑器命令CTRL+K+C注释掉所选文本,然后CTRL+K+U取消注释

    突出显示查询中的实体并按ALT+F1将运行sp_帮助,为您提供任何列、索引、参数等的详细信息。

    我强烈推荐RedGate的SQL提示符。自动发现(表、存储过程、函数和本机函数上的intellisense)简直太棒了

    不过这是有代价的。这个东西没有免费软件版本。

    用于子查询 对象资源管理器>在表上单击鼠标右键>将表作为脚本>选择到>剪贴板

    然后,您可以将其粘贴到您想要的部分作为子查询

    模板/代码片段 仅使用代码片段创建自己的模板。然后将模板作为新文档打开,只需将其拖动到当前查询以插入代码段

    代码段可以是一组带有注释的标题,也可以是一段简单的代码

    隐式交易 如果您不记得在删除状态之前启动事务,您可以转到选项并在所有查询中默认设置隐式事务。它们始终需要显式提交/回滚

    隔离水平 转到“选项”并将隔离级别设置为默认为“读取未限制”。这样,您就不需要在所有临时查询中键入NOLOCK。在编写新视图或存储过程时,不要忘记放置表提示

    默认数据库 您的登录名有一个由DBA设置的默认数据库(对我来说,通常几乎每次都是不需要的数据库)

    如果您希望它是一个不同的一个,因为你目前正在进行的项目

    在“已注册服务器”窗格中,右键单击>属性>连接属性选项卡>连接到数据库

    多重
    SELECT
    t.a
    ,t.b
    ,t.c
    ,t.d
    FROM t
    
    CREATE PROC upsert_Table1(@col1 int, @col2 varchar(200), @col3 float, etc.)
    AS
    BEGIN
      UPDATE table1 SET col1 = @col1, col2 = @col2, col3 = @col3, etc.
      IF @@error <> 0
        INSERT Table1 (col1, col2, col3, etc.)
        VALUES(@col1, @col2, @col3, etc.)
    END
    GO
    CREATE PROC delete_Table1(@col1)
    AS DELETE FROM Table1 WHERE col1 = @col1