我在SQL Server 2000上。
我有一个视图Statistics
,其中包含一个UNION ALL,在不同的数据库中有5个不同的表(但具有完全相同的结构):
SELECT *
FROM statistics_01.dbo.Stat
UNION ALL
SELECT *
FROM statistics_02.dbo.Stat
UNION ALL
SELECT *
FROM statistics_03.dbo.Stat
UNION ALL
SELECT *
FROM statistics_04.dbo.Stat
UNION ALL
SELECT *
FROM statistics_05.dbo.Stat
此视图用于促进不同表格中的更新。
表的主键如下:
[Date] [char](8) NOT NULL,
[Store] [int] NOT NULL,
[EAN] [char](14) NOT NULL,
每个表都有一个基于日期的不同约束:
- statistics_01.dbo.Stat, Constraint ([Date] >= '20100101' and [Date] <= '20101231')
- statistics_02.dbo.Stat, Constraint ([Date] >= '20110101' and [Date] <= '20111231')
- statistics_03.dbo.Stat, Constraint ([Date] >= '20120101' and [Date] <= '20121231')
- statistics_04.dbo.Stat, Constraint ([Date] >= '20130101' and [Date] <= '20131231')
- statistics_05.dbo.Stat, Constraint ([Date] >= '20140101' and [Date] <= '20141231')
因此,当视图完成插入时,取决于在右表中插入完成的日期。
但问题是,因为我创建了数据库statistics_05
和表Stat
并在视图中添加了新表,所以我总是收到以下消息。
Msg 4416,Sev 16:
UNION ALL视图Statistics
不可更新,因为该定义包含不允许的构造。 [SQLSTATE 42000]
P.S:我已经尝试用所有列替换*
但没有成功......
感谢您的帮助
答案 0 :(得分:0)
我发现了问题,这是由于新创建的表statistics_05.dbo.Stat的ANSI_PADDING
不同。
视图的其他表在ON上有ANSI_PADDING
SET,最后一个表是在ANSI_PADDING
设置为OFF时创建的。