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'。它包含一个或多个不允许使用的构造。
请高手帮忙看一下,多谢!!
27 个解决方案
#1
这些你开了没?
#2
视图SQL语句执行时并没有报错,报错的是执行索引SQL语句时。
另外:将上面说的都开通,视图SQL与索引SQL前面都加上如下,一样报错
SET ANSI_NULLS ON
GO
SET ANSI_PADDING ON
GO
SET ANSI_WARNINGS ON
GO
SET ARITHABORT ON
GO
SET CONCAT_NULL_YIELDS_NULL ON
GO
SET NUMERIC_ROUNDABORT OFF
GO
SET QUOTED_IDENTIFIER 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与索引SQL前面都加上如下,一样报错
SET ANSI_NULLS ON
GO
SET ANSI_PADDING ON
GO
SET ANSI_WARNINGS ON
GO
SET ARITHABORT ON
GO
SET CONCAT_NULL_YIELDS_NULL ON
GO
SET NUMERIC_ROUNDABORT OFF
GO
SET QUOTED_IDENTIFIER 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
一样报错同样信息。
#3
试图内排序没有意义,把top和order by去掉
#4
3楼的图是“不能出现在索引视图中的”
#5
首先感谢楼上两位,尤其是版主先生。感谢!!!
根据你们的建议,我修改视图SQL语句为如下:
SET ANSI_NULLS ON
GO
SET ANSI_PADDING ON
GO
SET ANSI_WARNINGS ON
GO
SET ARITHABORT ON
GO
SET CONCAT_NULL_YIELDS_NULL ON
GO
SET NUMERIC_ROUNDABORT OFF
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW dbo.V_MorePQty
WITH SCHEMABINDING
AS
SELECT 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' and PW_NO<>'' and PW_NO is not null
GROUP BY dbo.T_PIO.PW_No, dbo.T_PIO.TSW_WareHouse
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
然后再执行同样的索引SQL语句,但是还是报错,只是这次错误信息如下:
服务器: 消息 8662,级别 16,状态 1,行 1
无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。
根据你们的建议,我修改视图SQL语句为如下:
SET ANSI_NULLS ON
GO
SET ANSI_PADDING ON
GO
SET ANSI_WARNINGS ON
GO
SET ARITHABORT ON
GO
SET CONCAT_NULL_YIELDS_NULL ON
GO
SET NUMERIC_ROUNDABORT OFF
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW dbo.V_MorePQty
WITH SCHEMABINDING
AS
SELECT 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' and PW_NO<>'' and PW_NO is not null
GROUP BY dbo.T_PIO.PW_No, dbo.T_PIO.TSW_WareHouse
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
然后再执行同样的索引SQL语句,但是还是报错,只是这次错误信息如下:
服务器: 消息 8662,级别 16,状态 1,行 1
无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。
#6
CREATE VIEW dbo.V_MorePQty
WITH SCHEMABINDING
AS
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
试试这个,另外。。。我怎么没看到你说的“第二个人?”
WITH SCHEMABINDING
AS
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
试试这个,另外。。。我怎么没看到你说的“第二个人?”
#7
多谢版主先生,刚才看错了,后来仔细一看,原来最热心帮我解答的就是版主你一个了。再次表示感谢!!
#8
可是,可是,你还得帮我看看,我照你说的改了视图SQL语句 SUM(isnull(dbo.T_PIO.PIO_Qty,0)) ,再执行索引SQL时,还是报错同样信息哦。
服务器: 消息 8662,级别 16,状态 1,行 1
无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。
服务器: 消息 8662,级别 16,状态 1,行 1
无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。
#9
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值,或者些奇怪的值,另外回复引用一下
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值,或者些奇怪的值,另外回复引用一下
#10
找到了这个不正常的
#11
即使我视图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' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。
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' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。
#12
版主先生,还在么?帮我看看啊,感谢!!
#13
再试试把这个放里面
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
#14
或者先不创建索引,直接调视图看看结果
#15
调取视图看到的结果太多了有500多条,恕我不能一下全发给你。但是我尝试一摸一样的表,没有任何数据,先去建立视图,然后再执行索引SQL语句,还是一样的报错信息,所以我弱弱猜想一下,应该跟数据没有什么关系吧。是不是跟表字段属性有关呢?
我试着将视图的SQL语句改成你上面的,然后执行索引SQL语句时,错误信息又变成了这样:
服务器: 消息 8668,级别 16,状态 1,行 1
无法在视图 'V_MorePQty' 上创建索引,因为选定的视图列表包含一个非合计表达式。
我试着将视图的SQL语句改成你上面的,然后执行索引SQL语句时,错误信息又变成了这样:
服务器: 消息 8668,级别 16,状态 1,行 1
无法在视图 'V_MorePQty' 上创建索引,因为选定的视图列表包含一个非合计表达式。
#16
前面写错了,用这个试试:
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,'')
#17
创建视图的SQL语句执行都没有问题,都可以执行成功,并可以直接查看结果。
现在就是在后面执行索引SQL语句时不停报错。
现在就是在后面执行索引SQL语句时不停报错。
#18
视图中的表没有引用别的视图吧?另外列没有由别的比如getdate()这些创建的吧?
#19
查看求和的字段定义是否有加not null的限制?
#20
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() 这样的属性
这样还是提示:无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。
表T_AC 与 T_PIO中没有调用其他视图,但是里面有getdate() 这样的列存在。
SQL中用到的三个列PW_NO,TSW_WareHouse,PIO_Qty 都没有getdate() 这样的属性
#21
说错了,表中的字段有日期属性的 datetime,但是没有字段在表中用到 getdate() 这样的默认值
#22
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,'')
这样呢?
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,'')
这样呢?
#23
[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
执行索引SQL提示:
无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中不包括 count_big(*)。
#24
不是这句 AND dbo.T_PIO.PIO_Qty IS NOT NULL .
而是修改表结构的字段定义,修改该字段为not null.
alter table [表名] alter column [字段名] [数据类型] not null
#25
其实在你说改字段PIO_Qty属性为 NOT null之前我就试过了,不过为了对得起你的热心帮忙,我刚才又试了一遍。执行索引SQL错误信息如下:
无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中不包括 count_big(*)。
无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中不包括 count_big(*)。
#26
跟WHERE 子句里面加上 加上这句 AND dbo.T_PIO.PIO_Qty IS NOT NULL
报错信息是一摸一样的。
报错信息是一摸一样的。
#27
有没QQ,我干脆把表结构也打包发给你算了。
,帮忙就帮到底啊。好歹见个结果撒。
#1
这些你开了没?
#2
视图SQL语句执行时并没有报错,报错的是执行索引SQL语句时。
另外:将上面说的都开通,视图SQL与索引SQL前面都加上如下,一样报错
SET ANSI_NULLS ON
GO
SET ANSI_PADDING ON
GO
SET ANSI_WARNINGS ON
GO
SET ARITHABORT ON
GO
SET CONCAT_NULL_YIELDS_NULL ON
GO
SET NUMERIC_ROUNDABORT OFF
GO
SET QUOTED_IDENTIFIER 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与索引SQL前面都加上如下,一样报错
SET ANSI_NULLS ON
GO
SET ANSI_PADDING ON
GO
SET ANSI_WARNINGS ON
GO
SET ARITHABORT ON
GO
SET CONCAT_NULL_YIELDS_NULL ON
GO
SET NUMERIC_ROUNDABORT OFF
GO
SET QUOTED_IDENTIFIER 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
一样报错同样信息。
#3
试图内排序没有意义,把top和order by去掉
#4
3楼的图是“不能出现在索引视图中的”
#5
首先感谢楼上两位,尤其是版主先生。感谢!!!
根据你们的建议,我修改视图SQL语句为如下:
SET ANSI_NULLS ON
GO
SET ANSI_PADDING ON
GO
SET ANSI_WARNINGS ON
GO
SET ARITHABORT ON
GO
SET CONCAT_NULL_YIELDS_NULL ON
GO
SET NUMERIC_ROUNDABORT OFF
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW dbo.V_MorePQty
WITH SCHEMABINDING
AS
SELECT 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' and PW_NO<>'' and PW_NO is not null
GROUP BY dbo.T_PIO.PW_No, dbo.T_PIO.TSW_WareHouse
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
然后再执行同样的索引SQL语句,但是还是报错,只是这次错误信息如下:
服务器: 消息 8662,级别 16,状态 1,行 1
无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。
根据你们的建议,我修改视图SQL语句为如下:
SET ANSI_NULLS ON
GO
SET ANSI_PADDING ON
GO
SET ANSI_WARNINGS ON
GO
SET ARITHABORT ON
GO
SET CONCAT_NULL_YIELDS_NULL ON
GO
SET NUMERIC_ROUNDABORT OFF
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE VIEW dbo.V_MorePQty
WITH SCHEMABINDING
AS
SELECT 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' and PW_NO<>'' and PW_NO is not null
GROUP BY dbo.T_PIO.PW_No, dbo.T_PIO.TSW_WareHouse
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
然后再执行同样的索引SQL语句,但是还是报错,只是这次错误信息如下:
服务器: 消息 8662,级别 16,状态 1,行 1
无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。
#6
CREATE VIEW dbo.V_MorePQty
WITH SCHEMABINDING
AS
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
试试这个,另外。。。我怎么没看到你说的“第二个人?”
WITH SCHEMABINDING
AS
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
试试这个,另外。。。我怎么没看到你说的“第二个人?”
#7
多谢版主先生,刚才看错了,后来仔细一看,原来最热心帮我解答的就是版主你一个了。再次表示感谢!!
#8
可是,可是,你还得帮我看看,我照你说的改了视图SQL语句 SUM(isnull(dbo.T_PIO.PIO_Qty,0)) ,再执行索引SQL时,还是报错同样信息哦。
服务器: 消息 8662,级别 16,状态 1,行 1
无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。
服务器: 消息 8662,级别 16,状态 1,行 1
无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。
#9
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值,或者些奇怪的值,另外回复引用一下
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值,或者些奇怪的值,另外回复引用一下
#10
找到了这个不正常的
#11
即使我视图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' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。
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' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。
#12
版主先生,还在么?帮我看看啊,感谢!!
#13
再试试把这个放里面
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
#14
或者先不创建索引,直接调视图看看结果
#15
调取视图看到的结果太多了有500多条,恕我不能一下全发给你。但是我尝试一摸一样的表,没有任何数据,先去建立视图,然后再执行索引SQL语句,还是一样的报错信息,所以我弱弱猜想一下,应该跟数据没有什么关系吧。是不是跟表字段属性有关呢?
我试着将视图的SQL语句改成你上面的,然后执行索引SQL语句时,错误信息又变成了这样:
服务器: 消息 8668,级别 16,状态 1,行 1
无法在视图 'V_MorePQty' 上创建索引,因为选定的视图列表包含一个非合计表达式。
我试着将视图的SQL语句改成你上面的,然后执行索引SQL语句时,错误信息又变成了这样:
服务器: 消息 8668,级别 16,状态 1,行 1
无法在视图 'V_MorePQty' 上创建索引,因为选定的视图列表包含一个非合计表达式。
#16
前面写错了,用这个试试:
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,'')
#17
创建视图的SQL语句执行都没有问题,都可以执行成功,并可以直接查看结果。
现在就是在后面执行索引SQL语句时不停报错。
现在就是在后面执行索引SQL语句时不停报错。
#18
视图中的表没有引用别的视图吧?另外列没有由别的比如getdate()这些创建的吧?
#19
查看求和的字段定义是否有加not null的限制?
#20
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() 这样的属性
这样还是提示:无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中包括未知值(可为空表达式的求和)。
表T_AC 与 T_PIO中没有调用其他视图,但是里面有getdate() 这样的列存在。
SQL中用到的三个列PW_NO,TSW_WareHouse,PIO_Qty 都没有getdate() 这样的属性
#21
说错了,表中的字段有日期属性的 datetime,但是没有字段在表中用到 getdate() 这样的默认值
#22
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,'')
这样呢?
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,'')
这样呢?
#23
[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
执行索引SQL提示:
无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中不包括 count_big(*)。
#24
不是这句 AND dbo.T_PIO.PIO_Qty IS NOT NULL .
而是修改表结构的字段定义,修改该字段为not null.
alter table [表名] alter column [字段名] [数据类型] not null
#25
其实在你说改字段PIO_Qty属性为 NOT null之前我就试过了,不过为了对得起你的热心帮忙,我刚才又试了一遍。执行索引SQL错误信息如下:
无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中不包括 count_big(*)。
无法在视图 'V_MorePQty' 上创建索引,因为该视图的定义中不包括 count_big(*)。
#26
跟WHERE 子句里面加上 加上这句 AND dbo.T_PIO.PIO_Qty IS NOT NULL
报错信息是一摸一样的。
报错信息是一摸一样的。
#27
有没QQ,我干脆把表结构也打包发给你算了。
,帮忙就帮到底啊。好歹见个结果撒。