【发布时间】:2011-12-13 04:50:17
【问题描述】:
我创建了一个在 SQL Server 2008 上运行的 SQL 查询。由于某种原因,它需要很长时间并且超时不完整。
这是我为测试目的而修改的查询。 FileData 列是 varbinary(max),主键是 ContentFileId。如您所见,我只是想选择一个特定的记录。
SELECT *,
CASE
WHEN [CMS_tbContentFile].[FileData] IS NULL
THEN (
SELECT [CMS_tbContentFile2].[FileData]
FROM [CMS_tbContentFile] AS [CMS_tbContentFile2]
WHERE [CMS_tbContentFile2].[ContentFileId] = 2152
)
ELSE [CMS_tbContentFile].[FileData]
END AS [Test]
FROM [CMS_tbContentFile]
WHERE [CMS_tbContentFile].[ContentFileId] = 3054
CASE (SELECT [CMS_tbContentFile2].[FileData] FROM [CMS_tbContentFile] AS [CMS_tbContentFile2] WHERE [CMS_tbContentFile2].[ContentFileId] = 2152) 中的子查询自行运行良好,如果我删除主查询的该部分,主查询运行良好。只有CASE 和子查询的组合会导致问题。
希望通过查看上述内容,有人会发现问题,可能是这种类型的查询存在一些问题,而在 T-SQL 中是不可能的?
【问题讨论】:
-
你看执行计划了吗?它说什么?另外:您最近是否更新了您的表格,例如插入大量数据?在这种情况下,请确保在那张桌子上update your statistics!
标签: sql-server-2008 query-timeout