分离并获取副本数据库并将其附加到SQL Server

时间:2018-01-05 06:57:26

标签: sql-server vb.net

我正在尝试使用vb。

中的文件管理概念复制数据库文件

我的代码是:

IO.File.Copy(MukilCommon.APP_PATH & "\" & CurrentDbName & ".mdf", MukilCommon.APP_PATH & "\" & CurrentDbName & "_" & yearStr & ".mdf")
IO.File.Copy(MukilCommon.APP_PATH & "\" & CurrentDbName & ".ldf", MukilCommon.APP_PATH & "\" & CurrentDbName & "_" & yearStr & ".ldf")

我的代码从e:上的新数据库复制了一个数据库,如下所示:

 sample.mdf
 sample.ldf
 sample_2016.mdf
 sample_2016.ldf

我使用此代码将我复制的数据库附加到SQL Server中。

  db1.Execute("EXEC sp_attach_db @dbname = '" & CurrentDbName & "_" & yearStr & "', @filename1 = '" & MukilCommon.APP_PATH & "\" & CurrentDbName & "_" & yearStr & ".mdf', @filename2 = '" & MukilCommon.APP_PATH & "\" & CurrentDbName & "_" & yearStr & ".ldf'")

但是我收到了这条消息。

  

无法附加文件名,"示例"数据库已存在于SQL Server中。

实际上复制的文件已尝试附加在原始数据库上。如何附加此数据库?

2 个答案:

答案 0 :(得分:0)

据我所知,您拥有分离数据库的数据和日志文件,并且您希望将此数据库附加到SQL Server实例上。

从错误中,我了解到SQL Server实例上已经有一个名为“sample”的数据库

因此,如果要附加新数据库,可以选择要附加的数据库的新名称。也许你可以称之为sample2

由于您已经尝试分离,我猜测您的数据文件位于一个单独的文件夹中,而不是现有的示例数据库文件存在 您可以将这些文件保存在单独的文件夹中,这样就可以为示例数据库和sample2数据库使用相同的文件名称,例如TestDB.mdf

然后你可以像

那样执行你的代码
named_struct

答案 1 :(得分:0)

我的建议: 将文件放在不同的文件夹中,你必须保留同名的mdf和ldf文件,使用这个脚本:

USE [master]
GO
CREATE DATABASE [Simple_2017] ON 
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\2017\Simple.mdf' ),
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\2017\Simple_log.ldf' )
 FOR ATTACH
GO

请勿使用sp_attach_db