在SQL Server Management Studio中,我反复管理对主数据库而不是我想要的特定数据库运行sql脚本。我打开一个SQL文件,然后单击“运行”,反复忘记首先设置数据库。
我知道您可以为服务器连接设置默认值 - 但是如果我的预期数据库不是默认数据库,那么我最终可能会在默认数据库上运行sql而不是我想要的数据库。
sql中的USE语句也不起作用 - 脚本需要针对多个不同的测试数据库运行。
那么无论如何都要标记一条警告,即脚本即将针对master数据库运行?或者可能在脚本运行之前强制选择数据库?
答案 0 :(得分:11)
一种方法是使用仅在所需数据库中具有权限的帐户进行连接。不是系统管理员,而是你现在正在做的事情。
这对开发者来说是正常的
如果要以sysadmin身份运行,请将此行添加到每个脚本
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 :(得分:7)
IF DB_NAME() = 'master'
SET NOEXEC ON
GO
SELECT 1
GO
SET NOEXEC
将使脚本中的其余语句编译但不执行。
您必须先发出SET NOEXEC OFF
才能在此连接中执行任何操作(甚至在下拉框中选择数据库)。
或者只是关闭并重新打开脚本文件,它将关闭并重新打开连接。