Sql server SQL Server,添加字段和视图

Sql server SQL Server,添加字段和视图,sql-server,sql-server-2008,view,sql-server-2012,alter-table,Sql Server,Sql Server 2008,View,Sql Server 2012,Alter Table,-创建一个表 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_NORE

-创建一个表

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
-将记录添加到表中

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
-为表创建视图

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_测试运行视图

结果是:

tes_id  tes_name    tes_date
1   tiz com1
2   cla com2
3   mar com3
**我知道我必须运行alterview来更新它,但是如果我忘记了怎么做呢


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

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

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


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

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

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


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

自动更新视图是什么意思?不仅没有办法自动更新视图,而且最佳做法是指定视图中的每个列名,即不要使用
*
,因为这可能导致不可预测的行为。此外,建议使用它来确保在视图具有依赖项时不能修改视图。因此,总而言之,您应该考虑限制流程,而不是使其自动。自动更新视图是什么意思?不仅无法自动更新视图,而且最佳做法是指定视图中的每个列名,即不要使用
*
,因为这可能会导致不可预测的行为。此外,建议使用它来确保在视图具有依赖项时不能修改视图。所以总而言之,你应该考虑限制这个过程,而不是让它自动化。好吧,我知道你不应该在视图上使用*。最糟糕的是,结果是“滚动的”,因此视图将x列的值返回给y列。这很危险。谢谢你的建议,这是一个公平的观点。如果这回答了你的问题,你能这样做吗?谢谢。好的,我知道你不应该在视图中使用*。最糟糕的是,结果是“滚动的”,因此视图将x列的值返回给y列。这很危险。谢谢你的建议,这是一个公平的观点。如果这回答了你的问题,你能这样做吗?非常感谢。