Rápido e simples... por que este sp está falhando quando tento recuperar estatísticas para uma das colunas na tabela temporária?
CREATE PROCEDURE dbo.Demo
AS
BEGIN
SET NOCOUNT ON
-- Declare table variable
CREATE TABLE #temp_table (ID INT)
DECLARE @I INT = 0
-- Insert 10K rows
WHILE @I < 100
BEGIN
INSERT INTO #temp_table VALUES (@I)
SET @I=@I+1
END
-- Display all rows and output execution plan (now the EstimateRow is just fine!)
SELECT * FROM #temp_table
-- Is the object there
SELECT OBJECT_ID('tempdb..#temp_table')
-- How about statistics
DBCC SHOW_STATISTICS ('tempdb..#temp_table', 'id')
END;
Não entendo, recebo uma mensagem dizendo que não há estatísticas criadas no id da coluna
Could not locate statistics 'id' in the system catalogs.
Dito isso, vi um artigo de Paul White onde essa técnica é usada e realmente funciona.
https://sqlkiwi.blogspot.com/2012/08/temporary-tables-in-stored-procedures.html
Alguma ideia?
Você precisa criar explicitamente um objeto de estatísticas chamado
id
Quando deixados por conta própria, os objetos de estatísticas criados pelo sistema têm nomes estranhos como
_WA_Sys_00000002_5F141958
Apenas observe que, ao criar as estatísticas, você precisará mover o
CREATE STATISTICS
comando para depois de preencher a tabela temporária com dados, se quiser que ela mostre alguma coisa, ou possivelmente alterar sua consulta para atualizar as estatísticas, comoSELECT * FROM #temp_table WHERE ID > 0
.