SQL SERVER2000视图索引问题,紧急求救

Tikyliu 2014-07-25 02:26:19
视图SQL语句如下:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE VIEW dbo.V_MorePQty
WITH SCHEMABINDING
AS
SELECT TOP 100 PERCENT dbo.T_PIO.PW_No, SUM(dbo.T_PIO.PIO_Qty) AS Qty,dbo.T_PIO.TSW_WareHouse
FROM dbo.T_PIO INNER JOIN dbo.T_AC ON dbo.T_PIO.PIO_ACNo = dbo.T_AC.AC_ID
where T_AC.AC_Show='Y' AND T_PIO.PIO_Show='Y'
GROUP BY dbo.T_PIO.PW_No, dbo.T_PIO.TSW_WareHouse
ORDER BY dbo.T_PIO.PW_No, dbo.T_PIO.TSW_WareHouse

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

该视图对应索引SQL语句如下:
IF EXISTS (SELECT name FROM sysindexes WHERE name = 'IX_V_MorePQty')
DROP INDEX V_MorePQty.IX_V_MorePQty
CREATE UNIQUE CLUSTERED index IX_V_MorePQty ON V_MorePQty(PW_No,TSW_WareHouse)
go

执行索引SQL语句后,报错如下:

服务器: 消息 1936,级别 16,状态 1,行 1
无法 index 视图 'RZ.dbo.V_MorePQty'。它包含一个或多个不允许使用的构造。

请高手帮忙看一下,多谢!!
...全文
253 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tikyliu 2014-07-25
  • 打赏
  • 举报
回复
有没QQ,我干脆把表结构也打包发给你算了。,帮忙就帮到底啊。好歹见个结果撒。
Tikyliu 2014-07-25
  • 打赏
  • 举报
回复
跟WHERE 子句里面加上 加上这句 AND dbo.T_PIO.PIO_Qty IS NOT NULL 报错信息是一摸一样的。
Tikyliu 2014-07-25
  • 打赏
  • 举报
回复
其实在你说改字段PIO_Qty属性为 NOT null之前我就试过了,不过为了对得起你的热心帮忙,我刚才又试了一遍。执行索引SQL错误信息如下: 无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中不包括 count_big(*)。
唐诗三百首 2014-07-25
  • 打赏
  • 举报
回复
引用 23 楼 Tikyliu 的回复:
[PIO_Qty] [numeric](30, 3) NULL , 加上这句 AND dbo.T_PIO.PIO_Qty IS NOT NULL 执行索引SQL提示: 无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中不包括 count_big(*)。
不是这句 AND dbo.T_PIO.PIO_Qty IS NOT NULL . 而是修改表结构的字段定义,修改该字段为not null. alter table [表名] alter column [字段名] [数据类型] not null
Tikyliu 2014-07-25
  • 打赏
  • 举报
回复
[PIO_Qty] [numeric](30, 3) NULL , 加上这句 AND dbo.T_PIO.PIO_Qty IS NOT NULL 执行索引SQL提示: 无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中不包括 count_big(*)。
發糞塗牆 2014-07-25
  • 打赏
  • 举报
回复
SELECT dbo.T_PIO.PW_No , SUM(dbo.T_PIO.PIO_Qty) AS Qty , ISNULL(dbo.T_PIO.TSW_WareHouse,'')TSW_WareHouse FROM dbo.T_PIO INNER JOIN dbo.T_AC ON dbo.T_PIO.PIO_ACNo = dbo.T_AC.AC_ID WHERE T_AC.AC_Show = 'Y' AND T_PIO.PIO_Show = 'Y' AND PW_NO <> '' AND PW_NO IS NOT NULL AND dbo.T_PIO.PIO_Qty IS NOT NULL GROUP BY dbo.T_PIO.PW_No , ISNULL(dbo.T_PIO.TSW_WareHouse,'') 这样呢?
Tikyliu 2014-07-25
  • 打赏
  • 举报
回复
说错了,表中的字段有日期属性的 datetime,但是没有字段在表中用到 getdate() 这样的默认值
Tikyliu 2014-07-25
  • 打赏
  • 举报
回复
GROUP BY dbo.T_PIO.PW_No , ISNULL(dbo.T_PIO.TSW_WareHouse,'') 这样还是提示:无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。 表T_AC 与 T_PIO中没有调用其他视图,但是里面有getdate() 这样的列存在。 SQL中用到的三个列PW_NO,TSW_WareHouse,PIO_Qty 都没有getdate() 这样的属性
唐诗三百首 2014-07-25
  • 打赏
  • 举报
回复
查看求和的字段定义是否有加not null的限制?
發糞塗牆 2014-07-25
  • 打赏
  • 举报
回复
视图中的表没有引用别的视图吧?另外列没有由别的比如getdate()这些创建的吧?
Tikyliu 2014-07-25
  • 打赏
  • 举报
回复
创建视图的SQL语句执行都没有问题,都可以执行成功,并可以直接查看结果。 现在就是在后面执行索引SQL语句时不停报错。
發糞塗牆 2014-07-25
  • 打赏
  • 举报
回复
前面写错了,用这个试试:
SELECT  dbo.T_PIO.PW_No ,
        SUM(ISNULL(dbo.T_PIO.PIO_Qty, 0)) AS Qty ,
        ISNULL(dbo.T_PIO.TSW_WareHouse,'')TSW_WareHouse
FROM    dbo.T_PIO
        INNER JOIN dbo.T_AC ON dbo.T_PIO.PIO_ACNo = dbo.T_AC.AC_ID
WHERE   T_AC.AC_Show = 'Y'
        AND T_PIO.PIO_Show = 'Y'
        AND PW_NO <> ''
        AND PW_NO IS NOT NULL
GROUP BY dbo.T_PIO.PW_No ,
      ISNULL(dbo.T_PIO.TSW_WareHouse,'')
Tikyliu 2014-07-25
  • 打赏
  • 举报
回复
调取视图看到的结果太多了有500多条,恕我不能一下全发给你。但是我尝试一摸一样的表,没有任何数据,先去建立视图,然后再执行索引SQL语句,还是一样的报错信息,所以我弱弱猜想一下,应该跟数据没有什么关系吧。是不是跟表字段属性有关呢? 我试着将视图的SQL语句改成你上面的,然后执行索引SQL语句时,错误信息又变成了这样: 服务器: 消息 8668,级别 16,状态 1,行 1 无法在视图 'V_MorePQty' 上创建索引,因为选定的视图列表包含一个非合计表达式。
發糞塗牆 2014-07-25
  • 打赏
  • 举报
回复
或者先不创建索引,直接调视图看看结果
發糞塗牆 2014-07-25
  • 打赏
  • 举报
回复
再试试把这个放里面
SELECT  dbo.T_PIO.PW_No ,
        SUM(ISNULL(dbo.T_PIO.PIO_Qty, 0)) AS Qty ,
        ISNULL(dbo.T_PIO.TSW_WareHouse,'')TSW_WareHouse
FROM    dbo.T_PIO
        INNER JOIN dbo.T_AC ON dbo.T_PIO.PIO_ACNo = dbo.T_AC.AC_ID
WHERE   T_AC.AC_Show = 'Y'
        AND T_PIO.PIO_Show = 'Y'
        AND PW_NO <> ''
        AND PW_NO IS NOT NULL
GROUP BY dbo.T_PIO.PW_No ,
        dbo.T_PIO.TSW_WareHouse
Tikyliu 2014-07-25
  • 打赏
  • 举报
回复
版主先生,还在么?帮我看看啊,感谢!!
Tikyliu 2014-07-25
  • 打赏
  • 举报
回复
即使我视图SQL语句的where 字句中加上条件 SELECT dbo.T_PIO.PW_No, SUM(isnull(dbo.T_PIO.PIO_Qty,0)) AS Qty,dbo.T_PIO.TSW_WareHouse FROM dbo.T_PIO INNER JOIN dbo.T_AC ON dbo.T_PIO.PIO_ACNo = dbo.T_AC.AC_ID where T_AC.AC_Show='Y' AND T_PIO.PIO_Show='Y' and PW_NO<>'' and PW_NO is not null and TSW_WareHouse<>'' and TSW_WareHouse is not nullGROUP BY dbo.T_PIO.PW_No, dbo.T_PIO.TSW_WareHouse 再执行索引SQL还是一样提示 无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。
Tikyliu 2014-07-25
  • 打赏
  • 举报
回复
找到了这个不正常的
發糞塗牆 2014-07-25
  • 打赏
  • 举报
回复
SELECT dbo.T_PIO.PW_No, SUM(isnull(dbo.T_PIO.PIO_Qty,0)) AS Qty,dbo.T_PIO.TSW_WareHouse FROM dbo.T_PIO INNER JOIN dbo.T_AC ON dbo.T_PIO.PIO_ACNo = dbo.T_AC.AC_ID where T_AC.AC_Show='Y' AND T_PIO.PIO_Show='Y' and PW_NO<>'' and PW_NO is not null GROUP BY dbo.T_PIO.PW_No, dbo.T_PIO.TSW_WareHouse 执行一下这个,看看哪列有null值,或者些奇怪的值,另外回复引用一下
Tikyliu 2014-07-25
  • 打赏
  • 举报
回复
可是,可是,你还得帮我看看,我照你说的改了视图SQL语句 SUM(isnull(dbo.T_PIO.PIO_Qty,0)) ,再执行索引SQL时,还是报错同样信息哦。 服务器: 消息 8662,级别 16,状态 1,行 1 无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。
加载更多回复(7)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧