手机版

SQL SERVER 2005中对视图进行增删改操作技巧

时间:2021-08-05 来源:互联网 编辑:宝哥软件园 浏览:

类型:编程辅助大小:92KB语言:英文评分:3.3标签:立即下载Lesktop开源即时信息发布以后,有一些网友问及如何在嵌入即时信息后与自己网站的用户系统整合(即如何让嵌入的即时信息直接使用网站原有的用户数据库,而不需要将已有的用户数据导入到即时信息的数据库中)。Lesktop对用户表(存储用户登录名,昵称,密码等信息的表)都是在存储过程中进行增删改的,显然,如果直接去改用户表相关的存储过程是比较麻烦的,本文将介绍一种较为简单的方法,在不需要修改存储过程和源代码的情况下整合用户系统。

为实现这个目的,先介绍一下在数据库中,如何对视图进行增删改。假使用户有姓名,备注两项信息,但是没有存放在同一张表中,而是分开存储在两个表用户库(标识、名称)、用户范围(标识、备注)中。

为使用方便,建立一个视图用户,用于表示用户的完整信息,其定义如下:

创建视图[dbo].[用户]选择b。标识作为标识,b。名称作为名称,e。备注作为来自用户库b、用户范围e的备注,其中b。标识=e。标识;csharpcode .cs竖琴代码pre { font-size :小;颜色:黑色;font-family: consolas,'新快递员',快递员,单空间背景-color : # ffffff;/*空白: pre*/} .csharpcode pre { margin: 0em }。csharpcode .rem { color: # 008000}。csharpcode .kwrd { color: # 0000ff}。csharpcode .str { color: # 006080}。csharpcode .op { color: # 0000c0}。csharpcode .预编程{ color: # cc6633}。csharpcode .ASP {底色: # ffff 00} .csharpcode .html { color: # 800000}。csharpcode .attr { color: # ff0000}。csharpcode .alt {底色: # F4 F4;宽度: 100%;margin: 0em}。csharpcode .lnum { color: # 606060}

现在,我们希望通过用户视图进行增删改实现对用户库,用户范围表进行修改。显然,如果对用户直接执行插入、更新、删除是不可能的,执行时会发生以下错误:

在数据库中,对视图增删改可以通过触发器来实现,例如我们可以创建一个插入触发器,当在视图用户上执行插入时,在触发器中实现对用户库,用户范围的插入操作。在触发器中,可以通过名称为插入的的表,获取到新插入的行,具体代码如下:

CREATE TRIGGER [dbo].[用户_插入]开[数据库]。[用户]代替INSERTasdeclare @ name nvarchar(32),@备注nvarchar(32)声明ins _光标或选择名称,备注从插入钢笔的ins _光标或下一个从ins _光标进入@姓名,@备注;while(@@fetch_status=0)begin -读取所有行,并插入插入用户库(名称)值(@ Name);插入用户范围(标识,备注)值(@ @标识,@备注);将下一个从ins _光标获取到@name,@ remoteendclose ins_cursor

下面我们通过插入两行数据测试触发器:

-清空所有数据从用户范围中删除;从用户库中删除;创建表#temp(名称nvarchar(32),备注nvarchar(32))插入#temp(名称,备注)值(N'user1 ',N ' 1 ');插入#temp(名称,备注)值(N'user2 ',N ' 2 ');-插入两行数据插入用户(姓名、备注)从#tempdrop表中选择姓名、备注从用户中选择# temp select *;从用户库中选择*;从用户范围中选择*;

执行结果如下:

创建更新触发器,与插入触发器类似,受影响的行会保存在插入的中,可以从插入的表中获取受影响的行,并更新用户库,用户范围,具体代码如下:

CREATE TRIGGER [dbo].[用户_更新]开启[数据库]。[用户]而不是更新更新用户范围设置用户范围。备注=ins .注释来自插入用户范围的位置识别号=英寸.身份证;更新用户库设置用户库名称=英寸.名称来自插入的位置用户库识别号=英寸.身份证;

测试代码:

-清空所有数据从用户范围中删除;从用户库中删除;-插入两行数据插入用户(姓名、备注)值(N'user1 ',N ' 1 ');插入用户(姓名、备注)值(N'user2 ',N ' 2 ');插入用户(姓名、备注)值(N'user3 ',N ' 2 ');-修改后两行数据更新用户设置备注=N'3 ',其中备注=N'2' -输出数据从用户中选择*;从用户库中选择*;从用户范围中选择*;csharpcode .cs竖琴代码pre { font-size :小;颜色:黑色;font-family: consolas,'新快递员',快递员,单空间背景-color : # ffffff;/*空白: pre*/} .csharpcode pre { margin: 0em }。csharpcode .rem { color: # 008000}。csharpcode .kwrd { color: # 0000ff}。csharpcode .str { color: # 006080}。csharpcode .op { color: # 0000c0}。csharpcode .预编程{ color: # cc6633}。csharpcode .ASP {底色: # ffff 00} .csharpcode .html { color: # 800000}。csharpcode .attr { color: # ff0000}。csharpcode .alt {底色: # F4 F4;宽度: 100%;margin: 0em}。csharpcode .lnum { color: # 606060}

测试结果:

创建删除触发器,在删除的触发器中,可以通过删除表,获取被删除的行,具体代码如下:

CREATE TRIGGER [dbo].[用户_删除]开[数据库]。[用户]而不是删除从用户范围中删除标识所在(从已删除中选择标识)从用户基础中删除标识所在(从已删除中选择标识)

测试代码:

-清空所有数据从用户范围中删除;从用户库中删除;-插入两行数据插入用户(姓名、备注)值(N'user1 ',N ' 1 ');插入用户(姓名、备注)值(N'user2 ',N ' 2 ');插入用户(姓名、备注)值(N'user3 ',N ' 2 ');-删除后两行数据从备注=N'2 '的用户中删除-输出数据从用户中选择*;从用户库中选择*;从用户范围中选择*;csharpcode .cs竖琴代码pre { font-size :小;颜色:黑色;font-family: consolas,'新快递员',快递员,单空间背景-color : # ffffff;/*空白: pre*/} .csharpcode pre { margin: 0em }。csharpcode .rem { color: # 008000}。csharpcode .kwrd { color: # 0000ff}。csharpcode .str { color: # 006080}。csharpcode .op { color: # 0000c0}。csharpcode .预编程{ color: # cc6633}。csharpcode .ASP {底色: # ffff 00} .csharpcode .html { color: # 800000}。csharpcode .attr { color: # ff0000}。csharpcode .alt {底色: # F4 F4;宽度: 100%;margin: 0em}。csharpcode .lnum { color: # 606060}

运行结果:

上文已介绍了如何对视图进行增删改,接下来将介绍如何通过建立视图并添加增删改触发器实现Lesktop开源即时信息用户系统的整合。首先介绍一下Lesktop开源即时信息数据库中用户表的结构:

假使您的网站的用户表(假使名称为我的用户表)只有姓名、昵称:

那么,您可以建立一张扩展表(假使名称为UserExtentIM),用于存储其他信息:

接下来,您只需要把用户表删掉,重新建立一个名称为用户的视图,然后用上文处理用户、用户群、用户范围的方法,在用户视图上建好触发器,在触发器中对用户扩展时间表进行增删改即可,Lesktop的存储过程对用户进行读取和增删改时,将通过触发器自动转换成对用户扩展时间的操作,因此不需要修改任何存储过程和源代码,当然也不会对你原有的数据库造成影响。

版权声明:SQL SERVER 2005中对视图进行增删改操作技巧是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

相关文章推荐