1

我们通过这样的 sql 创建了一个索引视图:

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

同样在创建视图之后,我们在 Table1_ID 列上设置了聚集唯一索引。
所以 View 由两列组成:

Table1_ID
Table2TotalCount

我们有两个问题:

  1. 如果我们使用Count(1)orCount_BIG(1)代替Count_BIG(*),SQL 不允许我们在 Table1_ID 上设置索引
  2. 我们如何控制第二列 ( Table2TotalCount) 的类型 - SQL 为该列提供一个long 可空类型。但是我们想将此列设置为int 不可为空的类型。创建视图后,我们找不到任何更改列类型的方法。我们用于创建视图的 t-sql 也总是将 int 值返回给Table2TotalCount
4

2 回答 2

1

您必须使用 COUNT_BIG(*)。这是创建索引视图的限制之一:

视图中的 SELECT 语句不能包含以下 Transact-SQL 语法元素:

  • COUNT(允许使用 COUNT_BIG(*)。)

您可以创建第二个未编入索引的视图,该视图引用第一个视图,并将计数列的数据类型转换为您想要的类型(并且可能使用 ISNULL() 来防止可为空的属性)

于 2010-12-09T11:54:04.700 回答
0
  1. 这可能是因为您指望的是表达式而不是字段或*. Usingcount(1)给出与 相同的结果count(*),即计算记录数,因此没有理由使用count(1)

  2. 使用count代替count_bigint代替bigint(长)。(文档特别指出它们之间的唯一区别是返回类型。)我不知道为什么该值可以为空,因为count从不返回空值,但这对于所有聚合可能都是相同的,并且可能无法控制。

于 2010-12-09T10:39:40.160 回答