【问题标题】:SQL Server, add field and viewSQL Server,添加字段和视图
【发布时间】:2020-03-23 20:34:19
【问题描述】:

- 创建表

CREATE TABLE [dbo].[tb_tes_test](
[tes_id] [int] IDENTITY(1,1) NOT NULL,
[tes_name] [varchar](50) NULL,
[tes_date] [datetime] NULL,
CONSTRAINT [PK_tb_tit_titti] PRIMARY KEY CLUSTERED 
(
    [tes_id] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

- 向表中添加记录

tes_id  tes_name tes_date
1 tiz   2019-11-28 00:00:00.000
2 cla   2019-10-28 00:00:00.000
3 mar   2019-09-28 00:00:00.000

- 为表格创建视图

CREATE VIEW [dbo].[vw_test]
AS
SELECT dbo.tb_tes_test.*
FROM dbo.tb_tes_test

- 在两个现有字段之间的表中添加新字段 - 为字段插入值

tes_id  tes_name    tes_candy   tes_date 1  
1    tiz    com1    2019-11-28 00:00:00.000
2    cla    com2    2019-10-28 00:00:00.000 
3   mar com3    2019-09-28 00:00:00.000

- 使用 select * from vw_test 运行视图

结果是:

tes_id  tes_name    tes_date
1   tiz com1
2   cla com2
3   mar com3

**我知道我必须运行 alter view 来更新它,但是如果我忘记了怎么办?

是否有自动更新视图的选项?**

【问题讨论】:

  • 自动更新视图是什么意思?
  • 不仅没有办法自动更新视图,而且最佳实践是指定视图中的每个列名,即不要使用*,因为这会导致不可预知的行为。此外,建议使用SCHEMABINDING 以确保在视图具有依赖关系时无法修改它。所以总而言之,你应该考虑限制这个过程,而不是让它自动化。

标签: sql-server sql-server-2008 view sql-server-2012 alter-table


【解决方案1】:

当向表中添加新列时,您无法自动更新视图。视图是一种存储查询,可访问一个或多个表或视图。

由于视图通常用于安全目的,当您不希望用户访问表上的所有列时(例如隐藏员工工资等)。拥有自动添加新列的视图将是一个坏主意。恐怕如果您想将列添加到视图中,那么您需要做出有意识的决定。

如果您在视图定义中添加 SCHEMABINDING 构造,那么当您尝试将新列添加到表中时,由于从视图绑定到表,它会阻止您。这将提醒您同时更新视图。

【讨论】:

  • 好的,我知道你不应该在视图上使用 *。最糟糕的是结果是“滚动的”,因此视图将 x 列的值返回到 y 列。这是非常危险的。感谢您的建议。
  • 这是一个公平的观点。如果这回答了您的问题,您可以这样标记它吗?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多