如何将所有数据库(快速)自 sql server 2008 express 传递到 sql server 2008 R2(无 express)

Posted

技术标签:

【中文标题】如何将所有数据库(快速)自 sql server 2008 express 传递到 sql server 2008 R2(无 express)【英文标题】:how to pass all database (fast) since sql server 2008 express to sql server 2008 R2 (NO express) 【发布时间】:2011-04-28 00:34:32 【问题描述】:

好吧,我有 sql 2008 express,现在我已经安装了 sql server,现在我想删除 sql express,但在那种情况下,我拥有我工作过的所有数据库(加上 20 个),所以它们非常重要对我来说,我怎样才能将它传递给 sql server 2008 r2,我知道我可以做所有的数据库,但我不想做很多工作,有一条捷径可以通过 al 数据库?处理文件夹?某物?谢谢!

【问题讨论】:

【参考方案1】:

我附加了所有数据库,我添加了所有(但一对一)我在同一个窗口中添加了所有,在 5 分钟内我在 sql 中拥有所有数据库(没有快递)

【讨论】:

回答了你自己的问题,嗯? 是的,我找到了方法,并且我公开了它,以备将来,当其他用户做同样的问题然后找到我的问题,并观看答案:)【参考方案2】:

用 4 个步骤创建一个 SSIS 包。

首先,执行 SQL 任务,将所有 DB 备份到特定位置:

exec sp_msforeachdb '
IF DB_ID(''?'') > 4
Begin
BACKUP DATABASE [?] TO  DISK = N''\\Backups\?.BAK'' WITH NOFORMAT, INIT,
NAME = N''?-Full Database Backup'', SKIP, NOREWIND, NOUNLOAD
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N''?''
    and backup_set_id=(select max(backup_set_id) from msdb..backupset 
where database_name=N''?'' )
if @backupSetId is null begin
    raiserror(N''Verify failed. Backup information for database ''''?'''' not found.'', 16, 1)
end
RESTORE VERIFYONLY FROM  DISK = N''\\Backups\?.BAK'' WITH
   FILE = @backupSetId,  NOUNLOAD,  NOREWIND
End
'

其次,创建一个 SP 以使用位置和 DB 名称的变量来恢复 DB:

CreatePROCEDURE [dbo].[uSPMas_RestoreDB] @DBname         NVARCHAR(200), 
                                         @BackupLocation NVARCHAR(2000) 
AS 
  BEGIN 
      SET nocount ON; 

    create table #fileListTable 
(
    LogicalName          nvarchar(128),
    PhysicalName         nvarchar(260),
    [Type]               char(1),
    FileGroupName        nvarchar(128),
    Size                 numeric(20,0),
    MaxSize              numeric(20,0),
   )
insert into #fileListTable EXEC('RESTORE FILELISTONLY FROM DISK = '''+@BackupLocation+@dbname+'.bak''')

Declare @Dname varchar(500) 
Set @Dname = (select logicalname from #fileListTable where type = 'D')
Declare @LName varchar(500)
Set @LName = (select logicalname from #fileListTable where type = 'L')

declare @sql nvarchar(4000)
SET @SQL = 'RESTORE DATABASE  ['+ @dbname +'] FROM  
DISK = N'''+@BackupLocation + @dbname +'.BAK'' WITH  FILE = 1, 
 MOVE N'''+ @Dname +''' TO N''E:\YourLocation\'+ @dbname +'.mdf'', 
 MOVE N'''+ @LName +''' TO N''D:\Your2ndLocation\'+ @dbname +'_log.ldf'',
  NOUNLOAD,  REPLACE,  STATS = 10'

exec sp_executesql @SQL 

drop table #fileListTable
  END 

三、创建一个ForEach循环容器并放一个带有变量的Execute Sql Statement:

EXEC uSPMas_RestoreDB ? , ?

使用 for ForEach 循环容器传递变量

第四,创建一个“转移登录”任务来移动所有数据库登录

【讨论】:

发布代码时,请正确格式化(使用编辑器上方的按钮,或手动缩进四个空格)。它使其可读(并尝试语法突出显示它)

以上是关于如何将所有数据库(快速)自 sql server 2008 express 传递到 sql server 2008 R2(无 express)的主要内容,如果未能解决你的问题,请参考以下文章

巧妙使用SQL Server的计算列实现项目唯一规则快速定制

在excel中如何使用vba实现将sql的数据快速写入excel

SQL Server 自增长清除

SQL Server - 如何将所有数据库的读取权限授予登录名?

想将300M+的SQL文件导入SQL Server2008中,显示“存储空间不足”,求问题分析和解决方法,谢谢

sql数据库中,如何快速找数据量最大的几个表