是的,但您可能不需要它。
我目前正在使用一个过程,我按照 wbx911/Tim Post 在他们的答案中的方式附加附加数据库。但是,如果您要附加原始数据库的副本(例如由项目/解决方案构建创建的副本),则不需要分离它们。如果没有连接到数据库,它将在下一次测试运行时被覆盖。
如果您有很多附加的数据库副本,或者只是不想清理附加的所有内容,那么您可以使用如下所示的存储过程,附加到 localDb 实例的主数据库(例如我个人使用):
CREATE PROCEDURE [dbo].[DettachTestDatabases]
AS
BEGIN
DECLARE @imax INT,
@i INT
DECLARE @Name VARCHAR(255)
DECLARE @DbsToDrop TABLE(RowID INT IDENTITY ( 1 , 1 ),
name VARCHAR(255)
)
INSERT @DbsToDrop
SELECT [name]
FROM [master].[sys].[databases]
WHERE
--Remove all local dbs with *SomeText*.mdf or SomeOtherTextin name
(name like '%SomeText%.mdf' or name like '%SomeOtherText%')
-- Exclude VS test dbs (add more as required...)
and (name not like '%TESTS.%');
SET @imax = @@ROWCOUNT
SET @i = 1
WHILE (@i <= @imax)
BEGIN
SELECT @Name = name
FROM @DbsToDrop
WHERE RowID = @i
EXEC master.dbo.sp_detach_db @dbname = @Name;
PRINT 'Dettatched ' + @Name;
SET @i = @i + 1;
END --while
END --sp
GO
我正在使用命名约定来确定要删除哪些数据库(因此类似语句)。Visual Studio 附加了几个 db(或者至少我认为它们属于 VS)来管理我不想分离的测试结果(因此是“不喜欢”条件)。有一个 master.dbo.sp_detach_db 按名称分离,因此您实际上只需要引用名称,但由于 localdb 名称可能有点狂野,因此查找将很有用。
在我的测试结束时我还没有自动化这个,因为我觉得没有必要(因为覆盖工作正常),但我可以在我想要或需要的任何时候在 SSMS 中执行它。但是,如果您觉得有必要,您只需要从您的清理代码中管理对 SP 的调用。
附加数据库有点昂贵的过程。我选择了一种清理方法/SP,它删除任何可变数据并重新填充表以使数据库处于一致状态,这非常快,而不是重新附加数据库。
如果您发现任何改进点,我真的很想了解它们!