SQL Server 中视图用*可能会造成的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yenange/article/details/91125481
USE tempdb
GO
IF OBJECT_ID('view_stu') IS NOT NULL
DROP VIEW view_stu
GO
IF OBJECT_ID('stu') IS NOT NULL
DROP TABLE stu
GO
CREATE TABLE stu(
	stuId INT PRIMARY KEY,
	stuName NVARCHAR(5) NOT NULL,
	gender INT NOT NULL	
)
GO
SET NOCOUNT ON
INSERT INTO stu(stuId, stuName,gender) VALUES (1,'小明',1)
INSERT INTO stu(stuId, stuName,gender) VALUES (2,'小华',1)
INSERT INTO stu(stuId, stuName,gender) VALUES (3,'小江',0)
GO
--- 以上为测试表及测试数据

--1.1 创建视图
CREATE VIEW view_stu
AS
SELECT 
	*
	,CASE WHEN gender=1 THEN '男' ELSE '女' END AS gender_desc 
FROM stu
GO
--1.2 查看视图,暂时看起来是没有问题的
SELECT * FROM view_stu
/*
stuId       stuName gender      gender_desc
----------- ------- ----------- -----------
1           小明      1           男
2           小华      1           男
3           小江      0           女
*/
GO
--2.1 为学生添加年级,默认为 2
ALTER TABLE stu ADD grade INT NOT NULL DEFAULT(2)
GO
--2.2 再查看视图, 发现 gender_desc 不再是正确的显示结果
SELECT * FROM view_stu
/*
stuId       stuName gender      gender_desc
----------- ------- ----------- -----------
1           小明      1           2
2           小华      1           2
3           小江      0           2
 */
GO

--3.1 用存储过程刷新视图
EXEC sp_refreshview 'view_stu'
--3.2 再来看视图,已正确。 
-- 但请记住,sp_refreshview 不是最好的方式, 因为不可能总去更新视图,*效率也比较低
SELECT * FROM view_stu
/*
stuId       stuName gender      grade       gender_desc
----------- ------- ----------- ----------- -----------
1           小明      1           2           男
2           小华      1           2           男
3           小江      0           2           女
*/

GO
--4.1 修改视图为正确的方式

ALTER VIEW view_stu
AS
SELECT 
	stuId
	,stuName
	,gender
	,CASE WHEN gender=1 THEN '男' ELSE '女' END AS gender_desc 
FROM stu
GO
--4.2 查看视图, 正确了
SELECT * FROM view_stu
/*
stuId       stuName gender      gender_desc
----------- ------- ----------- -----------
1           小明      1           男
2           小华      1           男
3           小江      0           女
*/

 

展开阅读全文

没有更多推荐了,返回首页