通过VIEW插入表格

时间:2013-11-28 16:10:56

标签: sql sql-server sql-server-2000

我在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:我已经尝试用所有列替换*但没有成功......

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我发现了问题,这是由于新创建的表statistics_05.dbo.Stat的ANSI_PADDING不同。 视图的其他表在ON上有ANSI_PADDING SET,最后一个表是在ANSI_PADDING设置为OFF时创建的。