Pergunta

Eu tenho uma visão que está se juntando duas mesas e ordenação pela primeira tabela. Só que a ordem não está correto. Ele sente falta de um registro ocasional, e depois no final, a maioria desses registros existem em ordem, e depois para o efeito, o resto dos registros existem em ordem. Por isso, tem registros como

1  (most of the records in order)
2
4
5
6
7
8
10
11
13
15
3  (the first set of missing records)
12
9 (the rest of the missing records)
14

A minha opinião é abaixo. Preciso fazer a ordem de antes de eu fazer a junção? O que estou fazendo de errado? (Eu adquiri este ponto de vista, e exatamente o mesmo ponto de vista em outra instância db funciona corretamente.)

CREATE VIEW [dbo].[SampleView]
AS
SELECT     TOP 100 PERCENT blp.*, ISNULL(YEAR(DATEADD(month, 2, tb.[End of D&D])), 0) AS DEMO_FY
FROM         dbo.Table1 AS blp LEFT OUTER JOIN
                      dbo.Table2 AS tb ON blp.FACIL_NAME = tb.[Structure ID]
ORDER BY blp.ID

(edit) O tipo para o campo de classificação é [ID] [int] NOT NULL IDENTIDADE (1, 1),

Foi útil?

Solução

Leia Criar uma visão ordenada no SQL Server 2005 e SQL Server 2008 há um hotfix e você tem que executar em modo de compatibilidade 2000, para que ele funcione. Porque não basta fazer a encomenda por ao selecionar a partir do ponto de vista?

Outras dicas

Gostaria de remover a cláusula ORDER BY do ponto de vista completamente. Em vez disso, especifique a sua encomenda no momento que você consultar a exibição.

Um comentário em este entrada do blog torna bastante claro.

Apenas uma vez o texto de BOL:

"Quando ORDER BY é usada na definição de uma visão, função inline, tabela derivada, ou subconsulta, a cláusula é utilizada apenas para determinar as linhas retornadas pela cláusula TOP. A cláusula ORDER BY não garante resultados ordenados quando essas construções são consultados, a menos que ORDER BY também é especificado na própria consulta. "

"Embora a definição de exibição contém uma cláusula ORDER BY, que ORDER BY cláusula é usada apenas para determinar as linhas retornadas pela cláusula TOP. Ao consultar a vista em si, o SQL Server não garante os resultados serão ordenados, a menos que você especificar de forma tão explícita, como mostrado na consulta a seguir:

SELECT * FROM TopView
ORDER BY LastName

"

Provavelmente os dois servidores SQL são ligeiramente diferentes versões. Há um hotfix conhecida para esta:

http://support.microsoft.com/kb/926292/

Você deve sempre "ordem" no último ponto possível, uma vez que a classificação é lento (N log N). Quando você executa um seleto em uma visão, normalmente você vai incluir um onde cláusula. Você só quer ordenar que conjunto de resultados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top