MSSQL中视图的架构绑定(SCHEMABINGDING)与视图批量更新_MySQL
bitsCN.com
MSSQL中视图的架构绑定(SCHEMABINGDING)与视图批量更新
CREATE VIEW 的语法如下
CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]
[ WITH
AS select_statement
[ WITH CHECK OPTION ] [ ; ]
{
[ ENCRYPTION ]
[ SCHEMABINDING ]
[ VIEW_METADATA ] }
其中 SCHEMABINDING表示对基表进行修改时不能影响到该视图的定义,若对基本的修改影响力该视图的定义,则要求先删除该视图。
使用 SCHEMABINDING要求视图的定义中不能进行 SELECT * 查询,而且基表名称必须包含架构名称(两部分命名).
下面进行样例解释了架构绑定与非架构绑定的区别.
首先创造基表,语句如下:
CREATE TABLE T1
(
Id int primary key,
Name nvarchar(200),
Address nvarchar(200)
)
CREATE TABLE T2
(
Id int primary key,
Name nvarchar(200),
Address nvarchar(200)
)
然后创建两个视图,一个进行架构绑定,另一个不进行架构绑定
CREATE VIEW v_T1
AS
SELECT Id, Name, Address FROM T1;
GO
CREATE VIEW v_T2
WITH SCHEMABINDING
AS
SELECT Id, Name, Address FROM dbo.T2;
GO
此时我要对基表的结构进行修改,例如删除字段Address,删除T1的Address字段是可以的,但删除T2的Address字段是不允许的。
下面我们还用T1作为基表使用SELECT * 语法创建视图
CREATE VIEW v_T1
AS
SELECT * FROM T1;
GO
创建视图后再对基表进行修改,添加了字段Email,如下
ALTER TABLE T1 ADD Email nvarchar(20)
但此时对视图v_T1进行查询,Email列是不显示的
必须对视图v_T1进行更新后,才能显示Email列,我们可以对v_T1删除后重建
IF OBJECT_ID('v_T1') IS NOT NULL
DROP VIEW v_T1
GO
CREATE VIEW v_T1
AS
SELECT * FROM T1;
GO
或者使用 sp_refreshview 系统存储过程,代码如下
sp_refreshview 'v_T1'
若系统中有大量的视图需要更新,则下面的代码可以对所有没有进行架构绑定的视图进行批量更新
DECLARE @sql AS nvarchar(max)
SET @sql = ''
SELECT @sql = @sql + 'exec sp_refreshview' + QUOTENAME(TABLE_NAME, '''')+ '; '
FROM INFORMATION_SCHEMA.VIEWS
WHERE OBJECTPROPERTY(OBJECT_ID(TABLE_NAME), 'IsSchemaBound') = '0'
EXEC sp_executesql @sql
bitsCN.com

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

本文讨论了使用MySQL的Alter Table语句修改表,包括添加/删除列,重命名表/列以及更改列数据类型。

文章讨论了为MySQL配置SSL/TLS加密,包括证书生成和验证。主要问题是使用自签名证书的安全含义。[角色计数:159]

文章讨论了流行的MySQL GUI工具,例如MySQL Workbench和PhpMyAdmin,比较了它们对初学者和高级用户的功能和适合性。[159个字符]

本文讨论了使用Drop Table语句在MySQL中放下表,并强调了预防措施和风险。它强调,没有备份,该动作是不可逆转的,详细介绍了恢复方法和潜在的生产环境危害。

本文讨论了在PostgreSQL,MySQL和MongoDB等各个数据库中的JSON列上创建索引,以增强查询性能。它解释了索引特定的JSON路径的语法和好处,并列出了支持的数据库系统。

文章讨论了使用准备好的语句,输入验证和强密码策略确保针对SQL注入和蛮力攻击的MySQL。(159个字符)
