首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将SQL Server2008 R2数据库转换为SQL Server2012?

如何将SQL Server2008 R2数据库转换为SQL Server2012?
EN

Stack Overflow用户
提问于 2012-04-23 06:22:16
回答 5查看 33.9K关注 0票数 10

我安装了SQL Server2012,并附加了一个最初由SQL Server2008 R2生成的数据库。

一切似乎都很完美,只有一个问题:合并速度从每秒1000次下降到每秒10次(速度减慢了100倍)。

我猜测这是因为我正在从SQL Server2012访问SQL Server2008 R2数据库。有什么方法可以将数据库转换为SQL Server 2012格式吗?或者还有其他原因可以解释性能下降100倍的原因?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-04-23 06:30:11

请确保将数据库的兼容模式设置为110,并更新统计数据。

代码语言:javascript
复制
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 110;

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += CHAR(13) + CHAR(10) + 'UPDATE STATISTICS '
  + QUOTENAME(SCHEMA_NAME(schema_id)) 
  + '.' + QUOTENAME(name) + ' WITH FULLSCAN;'
  FROM sys.tables;

PRINT @sql;
--EXEC sp_executesql @sql;
票数 19
EN

Stack Overflow用户

发布于 2014-02-17 18:29:38

当我在答案中运行SQL时,nvarchar溢出。问题是当您的数据库有太多的表时,对于nvarchar来说,SQL太长了。我的数据库有足够的表使varchar溢出(是nvarchar的两倍)。因此,我对SQL进行了编辑,使其遍历每个表并执行单独的语句。这样,您就不会错过更新任何表上的统计数据。

代码语言:javascript
复制
ALTER DATABASE MyDatabase SET COMPATIBILITY_LEVEL = 110;

DECLARE @SQL NVARCHAR(MAX) = N'';

Declare @Tables table
([Schema] nvarchar(50)
,[TableName] nvarchar(100))

Insert into @Tables
Select QUOTENAME(SCHEMA_NAME(schema_id)),QUOTENAME(name) 
FROM sys.tables;

Declare @Schema nvarchar(50), @TableName nvarchar(100)

While Exists(Select * From @Tables)
Begin
    Select Top 1 @Schema = [Schema], @TableName = [TableName] From @Tables
    Set @SQL = 'UPDATE STATISTICS ' + @Schema + '.' + @TableName + ' WITH FULLSCAN;'

    Begin Try
        EXEC SP_ExecuteSql @SQLToExecute = @SQL 
        Print 'Completed: ' + @SQL
    End Try
    Begin Catch
        DECLARE @ErrMsg nvarchar(4000)
        SELECT  @ErrMsg = SubString(ERROR_MESSAGE(),0,900)

        Select GetDate(), 'Failed updating stats on ' + @Schema + ' ' + @TableName + '. Error: '+@ErrMsg
    End Catch

    Delete From @Tables Where [Schema] = @Schema and [TableName] = @TableName 
End
票数 2
EN

Stack Overflow用户

发布于 2013-05-08 00:17:36

在分离和附加数据库时,必须更新统计信息。否则,查询规划器将无法生成高效的执行计划,最终导致执行时间过长。这就是我注意到的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10272637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档