Sql Server 视图数据的增删改查教程

一、视图的基本概念

视图是用于查询的另外一种方式。 与实际的表不同,它是一个虚表;因此数据库中只存在视图的定义,而不存在视图中相对应的数据,数据仍然存放在原来的基本表中。视图是一种逻辑对象。

二、 视图能做什么

导出数据; 在导出数据时,常常需要多个表联合查询,这个时候就可以使用视图;转换字段,如把status(0/1 Int类型)字段转换成启用/停用(文字) ,然后用视图保存定义。

数据安全,可以给视图加密。

三、视图操作

3.1 查询数据

(一)准备素材:

使用两张表,其中一张是家电表,另外一张字典表(只需要知道这两张表有一个连接字段brandID-RowID:注意两个表没有强制使用外键约束),准备好素材

SELECT TOP 1000 [appliancesName]
  ,[appliancesType]
  ,[code]
  ,[**brandId**]
  ,[standard]
  ,[appliancesStatus]
  ,[appliancesIsNew]
  ,[appliancesIsKey]
  ,[appliancesRemark]
  ,[appliancesId]
 FROM sfa_t_appliances

另外一张表字典表

 SELECT TOP 1000 [**RowID**]
  ,[PRowID]
  ,[DicKey]
  ,[DicVal]
  ,[Status]
 FROM sfa_t_TSysDictionary

说明:sfa_t_appliances 表中的字段brandId 与 sfa_t_TSysDictionary表中的rowid做关联。

(二)创建视图:

create view appliances_view(id,name,brandName)
as
select s.appliancesId,s.appliancesName,d.DicVal
from sfa_t_appliances s,sfa_t_TSysDictionary d
where s.brandId = d.RowID

(三)查询:

查询数据,可以将视图看做一张实实在在的数据表,能够执行各种查询操作。

如下图所示,执行一个查询操作:

(四)备注

有些书上说:可以对任何查询结果进行排序,但是只有当视图包括Top子句时才能排序视图。这样看来书上确实是有问题的。动手实践出真知

3.2 插入数据

实验一

往视图中插入一条数据:

解释:

往视图中插入数据时,能够往sfa_t_appliances 中插入数据。但是视图为什么读取不到呢?

create view appliances_view(id,name,brandName)
as
select s.appliancesId,s.appliancesName,d.DicVal
from sfa_t_appliances s,sfa_t_TSysDictionary d
where s.brandId = d.RowID

注意视图的创建语法:是通过关联关系获取到的数据。注意观看视图的三个字段的来源。自然,在appliancesID为112233的记录中没有brandID,所以自然不能读取到数据。

实验二

说明: 往只含一个基本字段中插入数据是完全没有问题的。上图也插入成功了。

实验三

将多个基表的字段都插入试试:

insert into appliances_view(id,name,brandName) values(112234,'视图','冰箱')

小节:

使用INSERT语句进行插入操作的视图必须能够在基表(组成视图查询的表)中插入数据,否则会操作失败。

如果视图上没有包括基表中所有属性为not null的行,那么插入操作会由于哪些列的NULL值而失败。

补充

通过视图可以向数据库表中插入数据,修改数据和删除表中数据。如果视图的SELECT语句中包含了DISTINCT、表达式(如计算列和函数),或FROM子句中引用多个表,或者引用不可更新的视图,或有Group by 或者having子句,那么都不能通过视图操作数据。

3.3 修改数据

解释

能够对数据进行修改,但是只能修改一张表中的数据。

查看下图,修改基于两个表的字段:

失败了,说明只能修改一张表中的字段。

3.4 删除数据

小结:

如果一个视图链接了两个以上的基表,则不允许进行数据删除操作。如果视图中的列是常数或者几个字符串列值得和,那么尽管插入和更新操作时不允许的,但是却可以进行删除操作。

实验:

(一) 创建基于一个表的视图:

(二)执行删除操作结果:

(三)结果说明:

基于一个表的视图是能够执行删除操作的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • sqlserver 实现收缩数据库日志操作

    说明: 收缩日志的原因有很多种,有些是考虑空间不足,有些则是应用程序限制导致的. --将"恢复模式"设置为"简单" ALTER DATABASE xszzxt_test SET RECOVERY SIMPLE GO --收缩日志文件大小到10M DBCC SHRINKFILE (N'xszzxt_test_log' , 10, TRUNCATEONLY) GO --将"恢复模式"设置为"完整" ALTER DATABASE x

  • SQLSERVER对加密的存储过程、视图、触发器进行解密(推荐)

    加密测试的存储过程 IF EXISTS(SELECT 1 FROM SYSOBJECTS WHERE TYPE='P' AND NAME='P_TEST') DROP PROCEDURE P_TEST GO CREATE PROCEDURE P_TEST(@USERNAME VARCHAR(20),@MSG VARCHAR(20) OUTPUT) WITH ENCRYPTION AS BEGIN IF(SELECT COUNT(1) FROM Custs WHERE NAME=@USERNAME

  • 存储过程解密(破解函数,过程,触发器,视图.仅限于SQLSERVER2000)

    复制代码 代码如下: create PROCEDURE sp_decrypt(@objectName varchar(50)) AS begin begin tran declare @objectname1 varchar(100),@orgvarbin varbinary(8000) declare @sql1 nvarchar(4000),@sql2 nvarchar(4000),@sql3 nvarchar(4000),@sql4 nvarchar(4000),@sql5 nvarcha

  • sqlserver查询去掉重复数据的实现

    说明: 只要数据表"列名"数据相同,则说明是两条重复的数据(ID为数据表的主键自动增长). 推荐使用方法一 -- 方法一 select * from 表名 A where not exists(select 1 from 表名 where 列名=A.列名 and ID<A.ID) -- 方法二 select A.* from 表名 A inner join (select min(ID) ID,列名 from 表名 group by 列名) B on A.列名=B.列名 and

  • Sql Server 视图数据的增删改查教程

    一.视图的基本概念 视图是用于查询的另外一种方式. 与实际的表不同,它是一个虚表:因此数据库中只存在视图的定义,而不存在视图中相对应的数据,数据仍然存放在原来的基本表中.视图是一种逻辑对象. 二. 视图能做什么 导出数据: 在导出数据时,常常需要多个表联合查询,这个时候就可以使用视图:转换字段,如把status(0/1 Int类型)字段转换成启用/停用(文字) ,然后用视图保存定义. 数据安全,可以给视图加密. 三.视图操作 3.1 查询数据 (一)准备素材: 使用两张表,其中一张是家电表,另外

  • ADO.NET防SQL注入与使用参数增删改查

    一.sql注入风险及解决方案 SQL注入是指在事先定义好的SQL语句中注入额外的SQL语句,从此来欺骗数据库服务器的行为. 示例:制作会员登录功能. 登录按钮代码如下: private void btLogin_Click(object sender, EventArgs e) { //1-定义连接字符串 string connStr = "server=.;database=DBTEST;uid=sa;pwd=123456"; //2-定义连接对象,打开连接 SqlConnectio

  • Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(二)

    在上篇文章给大家介绍了Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(一),接下来我们添加分页相关的依赖,时间紧张,直接上代码了,贴上我的pom文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=

  • Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(一)

    环境搭建 spring boot的简介 以往我们开发时用到spring总是避免不了繁琐的配置,例如我们要配置一个数据库连接,可能需要以下几步: 1.编写jdbc.properties配置文件: 2.创建spring的配置文件,加入spring配置文件前缀.配置数据库连接信息以及sqlsessionFactory等等: 3.还要在web.xml文件中加入spring的监听. springboot的出现大大简化了项目的搭建过程(spring配置以及maven配置),让我们专注于应用功能的开发,而不是

  • 使用PHP连接数据库_实现用户数据的增删改查的整体操作示例

    main页面(主页面) <table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td>代号</td> <td>姓名</td> <td>性别</td> <td>民族</td> <td>生日</td> &l

  • jQuery+datatables插件实现ajax加载数据与增删改查功能示例

    本文实例讲述了jQuery+datatables插件实现ajax加载数据与增删改查功能.分享给大家供大家参考,具体如下: 这里给大家分享一下我在项目中用datatables实现ajax加载数据与增删改查 注意,需要引入jquery.datatables.layer html代码: <div class="thead"> <input placeholder="请输入搜索内容" id="searchTitle" type=&quo

  • AJAX实现数据的增删改查操作详解【java后台】

    本文实例讲述了AJAX实现数据的增删改查操作.分享给大家供大家参考,具体如下: 主页:index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></sc

  • C#操作SQLite实现数据的增删改查

    目录 简介 主要代码 SQLiteHelper.cs UsingLock.cs Form1.cs 简介 SQLite是一个轻量级.跨平台的关系型数据库,在小型项目中,方便,易用,同时支持多种开发语言,下面是我用C#语言对SQLite 的一个封装. Winfrom界面如下: 代码还需要改进部分: 下面的代码我不觉得是完美的,读者可以自己去实现这些功能: 1.如果不想用多线程可以去掉UsingLock.cs ,在SQLiteHelper.cs中删除对应的引用即可. 2.创建数据库文件,可以从代码中分

  • vue实现表格数据的增删改查

    在管理员的一些后台页面里,个人中心里的数据列表里,都会有对这些数据进行增删改查的操作.比如在管理员后台的用户列表里,我们可以录入新用户的信息,也可以对既有的用户信息进行修改.在vue中,我们更应该专注于对数据的操作和处理. 比如我们有一个这样的页面: 我们在这个页面里,就实现了增删改查4个功能,点击链接查看demo[http://www.xiabingbao.com/demo/vue-curd/index.html]. 我们把这些用户信息保存到list的数组中,然后增删改查就在这个数组上进行:

  • Java编程通过list接口实现数据的增删改查代码示例

    List接口常用的实现ArrayList. 常用方法:add(Object obj)  增加一个元素                      add(int index,Object obj) 在指定索引位置添加元素                      remove(int index) 删除指定位置的元素                      remove(Objiect)  从列表中删除元素                      set(index,Object) 修改指定位

随机推荐