Понимание типа столбца в индексированном представлении в SQL Server 2008 R2

StackOverflow https://stackoverflow.com/questions/4397093

Вопрос

Мы создали индексированное представление таким SQL:

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

Также после создания представления мы установили кластерный уникальный индекс в столбце Таблицы 1_ID.
Итак, просмотр состоит из двух столбцов:

Table1_ID
Table2TotalCount

У нас есть два вопроса:

  1. Если мы используем Count(1) или же Count_BIG(1) вместо Count_BIG(*), SQL не позволяет нам устанавливать индекс в Table1_id
  2. Как мы можем контролировать тип второго столбца (Table2TotalCount) - SQL дает длинный нулевой введите в этот столбец. Но мы хотим установить int не нулевой введите в этот столбец. После создания представления мы не можем найти способ изменить тип столбца. Также T-SQL мы используем для создания представления, всегда возвращайте значения int в Table2totalcount.
Это было полезно?

Решение

Вы должны использовать count_big (*). Это одно из ограничений на Создание индексированного представления:

Оператор SELECT в представлении не может содержать следующие элементы синтаксиса Transact-SQL:

  • Count (count_big (*) разрешен.)

Вы можете создать второе представление, которое не индексируется, что ссылается на это первое представление, и приводит тип данных столбца подсчета на ваш желаемый тип (и, возможно, использует isnull () для предотвращения нулевого свойства)

Другие советы

  1. Это, вероятно, потому, что вы рассчитываете на выражение вместо поля или *. Анкет С использованием count(1) дает тот же результат, что и count(*), т.е. считает количество записей, поэтому нет причин использовать count(1).

  2. Использовать count вместо count_big получить int вместо bigint (длинная). (В документации конкретно говорится, что единственная разница между ними - это тип возврата.) Я не знаю, почему значение является нулевым как count Никогда не возвращает NULL, но это может быть одинаковым для всех заполнителей и, вероятно, невозможно контролировать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top