Pregunta

crea una vista indizada por ejemplo SQL:

Select Table1_ID, Count_BIG(*) as Table2TotalCount from Table2 inner join
Table1 inner join... where...

índice único también después de crear la vista, nos propusimos agrupado en la columna Table1_ID.
Así Vista consiste en dos columnas:

Table1_ID
Table2TotalCount

Tenemos dos preguntas:

  1. Si usamos Count(1) o Count_BIG(1) en lugar de Count_BIG(*), SQL no nos permite indexar conjunto de Table1_ID
  2. ¿Cómo podemos controlar el tipo de la segunda columna (Table2TotalCount) - SQL dan una larga anulable escriba a esta columna. Pero queremos conjunto int no anulable tipo de esta columna. Después de la creación de Vista, no podemos encontrar ninguna manera de cambiar el tipo de columna. También T-SQL se utiliza para la creación de vista, siempre vuelven a valores int Table2TotalCount .
¿Fue útil?

Solución

Usted tiene que usar COUNT_BIG (*). Es una de las restricciones a la crear una vista indizada :

La instrucción SELECT en la vista no puede contener los siguientes elementos de sintaxis de Transact-SQL:

  • COUNT (COUNT_BIG (*) está permitido.)

Se puede crear una segunda opinión de que no está indexada, que las referencias de este primer punto de vista, y arroja el tipo de datos de la columna de recuento de su tipo deseado (y posiblemente utiliza un ISNULL () para evitar que la propiedad anulable)

Otros consejos

  1. Eso es probablemente porque usted está contando con una expresión en lugar de un campo o *. Usando count(1) da el mismo resultado que contar el número de registros count(*), es decir, lo que no hay razón para usar count(1).

  2. Uso count en lugar de count_big para obtener int en lugar de bigint (largo). (La documentación dice expresamente que la única diferencia entre ellos es el tipo de retorno.) No sé por qué el valor es anulable como count nunca vuelve nula, pero que podría ser el mismo para todos los agregados, y, probablemente, no es posible el control.

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