Microsoft 让我相信 SQL Server 2012 复制数据库向导是将 SQL Server 2000 数据库复制到 SQL Server 2012 的最佳方式。经过几个小时的努力,我解决了一些问题,并且能够导入小到中型 SQL Server 2000 数据库到 SQL Server 2012。
但是,对于 30GB 的数据库,向导经常失败并出现以下错误:
消息:传输数据时出错。有关详细信息,请参阅内部异常。
StackTrace:在 Microsoft.SqlServer.Management.Smo.Transfer.TransferData()
在 Microsoft.SqlServer.Dts.Tasks.TransferObjectsTask.TransferObjectsTask.TransferDatabasesUsingSMOTransfer()
InnerException --> 超时已过期。操作完成前超时时间已过或服务器未响应。
创建数据库失败。无法创建列出的某些文件名。检查相关错误。
StackTrace:
在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,Boolean breakConnection)
在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
我已经仔细检查过,这不是文件路径、权限或磁盘空间问题。我认为该CREATE DATABASE
步骤需要 2 分钟左右,向导假定操作超时。我使用 SQL 手动创建了一个具有相同文件路径和文件大小的空数据库,该数据库有效。有趣的是,一个 1GB 的数据库复制失败并出现相同的错误并在第二次尝试时成功。
请帮忙。
我正在审查一个性能不佳的查询,如下所示:
WHERE manymany.Active = -1
AND manymany.Check1 = -1
AND manymany.WebsiteID = @P1
AND CURRENT_TIMESTAMP BETWEEN ISNULL(manymany.FromDate, '1950-01-01') AND ISNULL(manymany.UptoDate, '2050-01-01')
AND main.Active = -1
AND main.StatusID = 1
AND CURRENT_TIMESTAMP BETWEEN main.FromDate AND ISNULL(main.UptoDate, '2050-01-01')
AND (main.TextCol1 IS NOT NULL OR main.TextCol2 IS NOT NULL)
ORDER BY aux.SortCode
Run Code Online (Sandbox Code Playgroud)
我不小心在这个查询上使用了 SSMS 查询设计器,它重新编写了查询,如下所示:
WHERE manymany.Active = -1
AND manymany.Check1 = -1
AND manymany.WebsiteID = @P2
AND CURRENT_TIMESTAMP BETWEEN ISNULL(manymany.FromDate, '1950-01-01') AND ISNULL(manymany.UptoDate, '2050-01-01')
AND main.Active = -1
AND main.StatusID = 1 …
Run Code Online (Sandbox Code Playgroud) 鉴于此数据:
gid | val
1 | a
1 | a
1 | a
2 | b
3 | x
3 | y
3 | z
Run Code Online (Sandbox Code Playgroud)
以下查询返回包含一个不同值 (val) 的组 (gid):
SELECT gid FROM t GROUP BY gid HAVING MIN(val) = MAX(val)
SELECT gid FROM t GROUP BY gid HAVING COUNT(DISTINCT val) = 1
Run Code Online (Sandbox Code Playgroud)
人们似乎认为第一个变体会更快(如果假设存在适当的索引,那么查找 MIN 和 MAX 将比计算所有值更快)。这是事实还是神话。
performance sql-server relational-division query-performance