当前位置:  开发笔记 > 数据库 > 正文

如何预览破坏性SQL查询?

如何解决《如何预览破坏性SQL查询?》经验,为你挑选了3个好方法。

在SQL Server Management Studio中编写破坏性查询(例如,DELETE或UPDATE)时,我总是发现自己希望能够在不实际运行查询结果的情况下预览查询结果.访问非常方便允许你这样做,但我更喜欢手工编写我的SQL,遗憾的是,Access非常差.

所以我的问题是双重的:

    是否有SSMS的附加组件,或者是一个单独的工具,它配备了良好的SQL手工编码工具,也可以预览破坏性查询的结果,类似于Access?

    是否有任何技术或最佳做法"手工"进行预览; 例如,以某种方式使用交易?

在我看来,做这种事情从根本上讲是重要的,但我似乎无法通过谷歌找到任何东西(我可能只是在寻找错误的东西 - 我对这件事非常无知).目前我采取了一种相当毛茸茸的腰带和括号方法来评论进出选择/删除/更新行并确保我做备份.肯定有必要有更好的方法吗?

有人可以帮忙吗?



1> MatBailie..:

我将使用SQL SERVER 2008中的OUTPUT子句...

OUTPUT子句(Transact-SQL)

就像是...

BEGIN TRANSACTION

DELETE [table] OUTPUT deleted.* WHERE [woof] 

ROLLBACK TRANSACTION

INSERT和UPDATE也可以使用'inserted'表.MSDN文章涵盖了所有内容.

编辑:

这就像SELECT中的其他建议然后在事务中删除,除了它实际上两者一起.因此,您打开一个事务,使用OUTPUT子句删除/插入/更新,并在ALSO输出已完成的操作时进行更改.然后您可以选择回滚或提交.


但你仍然容易犯错误.就像忘记突出显示where子句等一样.在这个例子中,你将开始一个事务,进行更改(你完全打算提交)OUPUT更改,然后在事务打开时保持连接打开.查看输出后,可以执行COMMIT或ROLLBACK.这样更安全,更可靠,因为它消除了更多的人为错误.它确实意味着桌子被锁定,所以你需要小心.

2> Kevin Buchan..:

我生活在害怕有人这样做到我的数据库,所以我总是要求我的团队做类似以下的事情:

BEGIN TRAN
 
DELETE FROM X
-- SELECT * FROM X
FROM Table A as X JOIN Table B ON Blah blah blah
WHERE blah blah blah
 
ROLLBACK TRAN
COMMIT TRAN

这样,如果你不小心碰到F5(做完了!),你就不会做任何改动.您可以在SQL语句的末尾突出显示SELECT部分​​,以查看将更改哪些记录(以及有多少记录).然后,突出显示BEGIN TRAN和整个Delete语句并运行它.如果删除了预期的相同数量的记录,请突出显示COMMIT TRAN并运行它.如果看起来很糟糕,请突出显示ROLLBACK TRAN并运行它.

我使用任何UPDATE或DELETE语句执行此操作.它救了我几次,但它总是让人高枕无忧.


这一切都可以正常工作,直到有人忘记COMMIT - 并最终阻止其他用户.我发现这种情况发生的次数太多了,所以在使用这种策略时要小心.
我按照列出的顺序执行此操作的原因是,我可以一起突出显示BEGIN TRAN和DELETE语句.如果DELETE被注释掉了,我必须单独进行,但这只是开发人员的偏好.感谢您的评论.

3> kravits88..:

删除时:

BEGIN TRANSACTION

   DELETE FROM table1 
   OUTPUT deleted.*
   WHERE property1 = 99 

ROLLBACK TRANSACTION

更新/插入时:

BEGIN TRANSACTION

   UPDATE table1
   SET table1.property1 = 99
   OUTPUT inserted.*

ROLLBACK TRANSACTION

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有