0

SQL Server 2008 で実行する SQL クエリを作成しました。何らかの理由で時間がかかり、不完全なタイムアウトになります。

これは、テスト目的で変更された私のクエリです。列FileDataは でvarbinary(max)、主キーはContentFileIdです。ご覧のとおり、特定の 1 つのレコードのみを選択しようとしています。

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 では不可能なこのタイプのクエリの問題でしょうか?

4

1 に答える 1

1

あなたは私たちに多くの情報を提供していませんが、とにかく:副選択はすべての行に対して実行されるため、[CMS_tbContentFile].[ContentFileId] = 3054の1000フィールドがある場合、1000回実行できます/実行されます。

以下のコードを試すか、結合して書き直してみてください。

declare @field varchar(255) //define here the same type as the [filedata] column has
select 
   @field = [cms_tbcontentfile2].[filedata] 
from 
   [cms_tbcontentfile] as [cms_tbcontentfile2]
where 
   [cms_tbcontentfile2].[contentfileid] = 2152

SELECT 
   *, 
   isnull([CMS_tbContentFile].[FileData], @field) as [Test]
FROM 
   [CMS_tbContentFile] 
WHERE 
   [CMS_tbContentFile].[ContentFileId] = 3054
于 2011-12-13T08:40:42.673 に答える