2011-08-05 26 views
2

在SQL Server Management Studio中,我反复设法对主数据库运行sql脚本,而不是我想要的特定数据库。我打开一个SQL文件,然后单击运行,反复忘记先设置数据库。在运行SQL之前检查数据库名称

我知道你可以设置一个服务器连接的默认 - 但后来我可能最终默认的数据库上运行的SQL,而不是我的目的之一,如果我打算一个是不是默认。

在SQL中使用语句将不会工作,要么 - 脚本必须针对多个不同的测试数据库运行。

所以反正是有标志的警告脚本即将对主数据库运行?或者可能在脚本运行之前先强制选择数据库?

回答

10

一种方式是与只有在所需的数据库权限的帐户连接。不是系统管理员,这是你现在正在做的。

如果你想为系统管理员运行,该行添加到每个脚本

IF DB_NAME() = 'master' 
    RAISERROR ('Oi! Stop!', 20, 1) WITH LOG 
GO 

这将杀死连接

编辑这是正常的开发

我喜欢Quassnoi的解决方案,因为它不需要系统管理员权限。 但是,您无法提供反馈或回复。

所以,我一直在玩这个。它检查最箱

  • 有趣的消息
  • 没有系统管理员需要
  • 重新运行的(种)

有一个问题,一个SSMS USE(通过下拉)被忽略(按照Quassnoi的笔记),但它已经到了。任何人有更多的想法?

SET NOEXEC OFF; 
GO 
DECLARE @isOK bit; 
BEGIN TRY 
    IF DB_NAME() IN ('master', 'protectedDB1', '...') 
     RAISERROR ('To Catch Block Only', 16, 1); 
    SET @isOK = 1; 
END TRY 
BEGIN CATCH 
    SET @isOK = 0; 
    RAISERROR ('Oi! Stop!', 16, 1); 
END CATCH 
IF @isOK = 0 
    SET NOEXEC ON; 
GO 
SELECT 1; 
GO 
+1

+1:暴力,但有趣的解决方案! – Tao

+0

+1,我见过的最佳错误讯息! ''喂!停止!'' –

+0

+1但这是作弊:你不能提供一个有趣的信息给'SET NOEXEC ON'! – Quassnoi

7
IF DB_NAME() = 'master' 
     SET NOEXEC ON 
GO 
SELECT 1 
GO 

SET NOEXEC将使脚本中其余的语句编译但未执行。

你将不得不发行SET NOEXEC OFF,你将能够在这方面进行任何东西(甚至选择下拉框中的数据库)之前。

或者只是关闭并重新打开脚本文件,它会关闭并重新打开连接。

+1

您的意思是“您将不得不发出'SET NOEXEC OFF'”...? –

相关问题