Pregunta

Tengo una vista que une dos tablas y ordena por la primera tabla. Excepto que el orden no es correcto. Se pierde un registro ocasional, y luego, al final, la mayoría de esos registros existen en orden, y luego, al final, el resto de los registros existen en orden. Entonces tiene 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

Mi vista está abajo. ¿Debo hacer el pedido antes de unirme? ¿Qué estoy haciendo mal? (He adquirido esta vista, y la misma vista exacta en otra instancia de db funciona correctamente).

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

(editar) El tipo para el campo de clasificación es [ID] [int] NOT NULL IDENTITY (1, 1),

¿Fue útil?

Solución

Leer Crear una vista ordenada en SQL Server 2005 y SQL Server 2008 hay una revisión y TIENE que ejecutarla en modo de compatibilidad 2000 para que funcione. ¿Por qué no simplemente hacer el pedido al seleccionar desde la vista?

Otros consejos

Quitaría la cláusula ORDER BY de la vista por completo. En su lugar, especifique su pedido al momento de consultar la vista.

Un comentario en esto la entrada del blog lo deja bastante claro.

Solo una vez más el texto de BOL:

  

" Cuando ORDER BY se usa en la definición de una vista, función en línea, tabla derivada o subconsulta, la cláusula se usa solo para determinar las filas devueltas por la cláusula TOP. La cláusula ORDER BY no garantiza resultados ordenados cuando se consultan estas construcciones, a menos que ORDER BY también se especifique en la consulta misma. & Quot;

     

" Aunque la definición de vista contiene una cláusula ORDER BY, esa cláusula ORDER BY se usa solo para determinar las filas devueltas por la cláusula TOP. Al consultar la vista en sí, SQL Server no garantiza que se ordenarán los resultados, a menos que lo especifique explícitamente, como se muestra en la siguiente consulta:

SELECT * FROM TopView
ORDER BY LastName

"

Lo más probable es que los dos servidores SQL sean versiones ligeramente diferentes. Hay una revisión conocida para esto:

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

Siempre debe " ordenar " en el último punto posible, ya que la ordenación es lenta (N log N). Cuando realiza una selección en una vista, generalmente incluirá una cláusula where. Solo desea ordenar ese conjunto de resultados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top