2017-06-14 18 views
0

私は35のテーブルしか持っていませんが、以下のクエリを実行するとこのエラーが発生します。クエリプロセッサに内部リソースが不足し、クエリプランが生成されませんでした。これはまれなイベントであり、非常に複雑なクエリや非常に多数のテーブルまたはパーティションを参照するクエリに対してのみ期待されます。クエリを簡略化してください。このメッセージが誤って受信されたと思われる場合は、カスタマーサポートサービスに連絡してください。このエラーを回避するにはどうすればよいでしょうか?INFORMATION_SCHEMA.COLUMNSを照会して「クエリ・プロセッサーが内部リソースを使い果たし、照会プランを作成できませんでした」

CREATE TABLE DemoTable 
(
    ID INT identity(1,1), 
    col nvarchar(20) 
) 
*/ 

/*INSERT INTO DemoTable VALUES 
('P000092436'), 
('123466'), 
('123456'), 
('P000092436'), 
('13456'), 
('P000092436')*/ 

DECLARE @SearchStr nvarchar(100) = '92436', 
     @SQL nvarchar(max) = '' 

/*SELECT @SQL = @SQL + 
'UNION 
SELECT '''+ QUOTENAME(t.TABLE_SCHEMA) +'.'+ QUOTENAME(c.TABLE_NAME) +'.'+QUOTENAME(c.COLUMN_NAME) +''' As ColumnName, 
'''+ @SearchStr +''' As ColumnValue, 
(SELECT * FROM '+ QUOTENAME(c.TABLE_NAME) +' WHERE '+ QUOTENAME(c.COLUMN_NAME) +' LIKE ''%'+ @SearchStr +'%'' FOR XML AUTO) 
FROM '+ QUOTENAME(c.TABLE_NAME) +' 
WHERE '+ QUOTENAME(c.COLUMN_NAME) +' LIKE ''%'+ @SearchStr +'%''*/ 
SELECT @SQL = @SQL + 
'UNION 
SELECT '''+ t.TABLE_SCHEMA +'.'+ c.TABLE_NAME +'.'+c.COLUMN_NAME +''' As ColumnName, 
'''+ @SearchStr +''' As ColumnValue, ' + '''<'' + ' + 'CAST(' + ' 
(SELECT ' + n.LIST_COLUMN + 'FROM '+ c.TABLE_NAME +' WHERE '+ c.COLUMN_NAME +' LIKE ''%'+ @SearchStr +'%'' FOR XML PATH(''''), TYPE) AS VARCHAR(MAX)) + ''/>'' 
FROM '+ c.TABLE_NAME +' 
WHERE '+ c.COLUMN_NAME +' LIKE ''%'+ @SearchStr +'%'' 
' 
--SELECT c.COLUMN_NAME, t.TABLE_NAME, n.LIST_COLUMN 
FROM INFORMATION_SCHEMA.COLUMNS c 
INNER JOIN INFORMATION_SCHEMA.TABLES t ON c.TABLE_NAME = t.TABLE_NAME 
INNER JOIN 
(
select 
b.TABLE_NAME, 
stuff((select ',''"'' + CAST('+ a.COLUMN_NAME + ' AS VARCHAR(200)) + ''",''' 
     from INFORMATION_SCHEMA.COLUMNS a 
     where a.TABLE_NAME = b.TABLE_NAME 
     For XML PATH('')),1,1,'') LIST_COLUMN 
from (select distinct TABLE_NAME from INFORMATION_SCHEMA.COLUMNS) b 
) n ON n.TABLE_NAME = c.TABLE_NAME 

WHERE t.TABLE_TYPE = 'BASE TABLE'; 

SET @SQL = STUFF(@SQL, 1, 7, '') 

IF OBJECT_ID('tempdb..#SearchResults') IS NOT NULL 
    /*Then it exists*/ 
DROP TABLE #SearchResults 

CREATE TABLE #SearchResults 
(
    ColumnName nvarchar(500), 
    ColumnValue nvarchar(100), 
    --RowContent XML 
    RowContent nvarchar(max) 
) 
PRINT @SQL; 
INSERT INTO #SearchResults 
EXEC(@SQL) 

SELECT * 
FROM #SearchResults 

答えて

1

あなたの目標はこのクエリでは明確ではありませんが、UNIONステートメントは非常に高価です。クエリを書き直す必要があります。

多分、BEGIN/ENDを使用して、行ごとに評価するテーブルを作成することができます。