Meu entendimento do uso de TABLESAMPLE é que ele retorna o n por cento superior das linhas em um conjunto de resultados onde TABLESAMPLE(n)
Então, escrevi as seguintes consultas apenas para verificar (como estou aprendendo T-SQL)
SELECT FirstName,
MiddleName,
LastName
FROM Person.Person TABLESAMPLE(10)
SELECT FirstName,
MiddleName,
LastName
FROM Person.Person TABLESAMPLE(10 PERCENT)
Cada consulta retorna um número diferente de linhas toda vez que a executo.
Obviamente, não entendo TABLESAMPLE. Alguém poderia explicar?
A resposta curta é que
TABLESAMPLE
não há garantia de retornar o número de linhas que você especificar (ou o %) porque ele se baseia em páginas e não em linhas e retorna todas as linhas das páginas que identifica. A menos que sua tabela tenha apenas colunas de largura fixa, as páginas extraídas com base em % ou número de linhas podem conter números de linhas muito diferentes.Você pode tornar isso mais consistente usando a
REPEATABLE
opção, mas isso ainda não fará com que ele retorne o número correto de linhas. Se você está simplesmente tentando recuperar um número exato ou porcentagem de linhas aleatórias, use:Por favor, leia esta dica e esta pergunta e todas as respostas .
Concordo com @Aaron, mas devo mencionar que, se você deseja registros verdadeiramente aleatórios, isso pode ser mais adequado, especialmente em tabelas enormes:
Por favor, leia a descrição completa no MSDN
Espero que isso ajude.
TableSample() não garante o retorno do número ou % que você especificar. Descobri que ele pode retornar 0 linhas, menos do que você solicitou e mais do que você especificou.
Executei esta consulta na tabela Orders no Northwind, que possui 829 linhas.
Nas diferentes vezes que executei esta consulta, obtive, 124, 42,82, 85,0, 0, 84. ..