我的任务是使用一个名为dbobackup的新模式将“默认模式”数据库dbo中的数据备份到同一个数据库。
老实说,就数据库而言,我不明白这意味着什么。显然,这就像在现有数据库中进行数据库备份一样。我想这样做是有好处的。
无论如何,我似乎在网上找不到任何能让我这么做的地方。
我在这里找到了一些关于在没有数据的情况下复制模式的帖子,但我也需要这些数据。
如何检查是否存在模式,如果存在则删除它,然后创建接受当前数据库中数据的架构?
一旦创建了新模式,可以使用这样的简单命令将数据转储到其中吗?
SELECT * INTO [dbobackup].Table1 FROM [dbo].Table1;不过,这一行只备份了一张表。如果我需要对这个特定客户的245个表执行此操作,我将需要一个脚本。
我们也有几个客户,他们的数据库结构不一样。
我能做些类似的事情吗?
我正在考虑创建一个小型的控制台程序来遍历这些表。
我如何修改下面的代码来做我想做的事情呢?
public static void Backup(string sqlConnection)
{
using (var conn = new SqlConnection(sqlConnection))
{
conn.Open();
var tables = new List<String>();
var sqlSelectTables = "SELECT TableName FROM [dbo];";
using (var cmd = new SqlCommand(sqlSelectTables, conn))
{
using (var r = cmd.ExecuteReader())
{
while (r.Read())
{
var item = String.Format("{0}", r["TableName"]).Trim();
tables.Add(item);
}
}
}
var fmtSelectInto = "SELECT * INTO [dbobackup].{0} FROM [dbo].{0}; ";
using (var cmd = new SqlCommand(null, conn))
{
foreach (var item in tables)
{
cmd.CommandText = String.Format(fmtSelectInto, item);
cmd.ExecuteNonQuery();
}
}
}
}发布于 2015-12-04 18:13:40
Server已经内置了此功能。如果打开并右键单击要备份的数据库,然后选择“所有任务”然后选择“备份”,则将获得将数据库备份到现有数据库的选项。
这是重要的部分,也是为什么您应该使用内置功能:您必须以正确的顺序将数据从一个DB复制到另一个DB,否则您会在整个地方得到外键错误。如果您有大量的数据表和许多关系,这将是很难确定您自己。您可以编写代码来生成所有依赖项的完整图表,然后确定复制表数据的顺序(这基本上就是Server已经做的事情)。
此外,还有第三方程序也可以进行这种类型的备份(请参阅: Google)。
发布于 2015-12-10 21:58:52
这是一种“正在进行中的工作”的方法,我一开始就这么做,看起来很有希望:
public static void CopyTable(
string databaseName, // i.e. Northwind
string tableName, // i.e. Employees
string schema1, // i.e. dbo
string schema2, // i.e. dboarchive
SqlConnection sqlConn)
{
var conn = new Microsoft.SqlServer.Management.Common.ServerConnection(sqlConn);
var server = new Microsoft.SqlServer.Management.Smo.Server(conn);
var db = new Microsoft.SqlServer.Management.Smo.Database(server, databaseName);
db.Tables.Refresh();
for (var itemId = 0; itemId < db.Tables.Count; itemId++)
{
var table = db.Tables.ItemById(itemId);
if (table.Name == tableName)
{
table.Schema = String.Format("{0}", DatabaseSchema.dboarchive);
table.Create();
}
}
}我目前遇到的唯一问题是,我的db变量总是与Tables.Count == 0一起返回。
如果我有机会解决这个问题,我会更新的。
现在,我被告知要删除这段代码并签入我的代码。
https://stackoverflow.com/questions/34094608
复制相似问题