小编Sal*_*n A的帖子

使用复制数据库向导时超时过期错误

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 的数据库复制失败并出现相同的错误并在第二次尝试时成功。

请帮忙。

sql-server ssis restore sql-server-2012

8
推荐指数
1
解决办法
6394
查看次数

重新排列 OR 条件时,SQL Server 创建不同的计划

我正在审查一个性能不佳的查询,如下所示:

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)

sql-server optimization execution-plan sql-server-2012

7
推荐指数
1
解决办法
171
查看次数

查找只有一个值的组:COUNT(DISTINCT x) = 1 vs MIN(x) = MAX(x)

鉴于此数据:

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

5
推荐指数
1
解决办法
126
查看次数