sqlserver常用操作:

视图、存储过程、触发器、函数

--*********************批处理*********************
--[在一个批处理中存有一个语法错误,则所有的语句都无法通过编译]
USE flowershopdb
SELECT * FROM tb_category
SELECT * FROM tb_detailed
SELECT * FROM tb_product
SELECT * FROM tb_shopping
SELECT * FROM tb_user
INSERT tb_user(u_name,u_pass) VALUES('user3','')
DELETE tb_user WHERE u_id=4
UPDATE tb_user SET u_name='sa',u_pass='' WHERE u_id=2
GO --*********************视图*********************
CREATE VIEW v_cd
AS
--内连接[不建议使用联合查询]
SELECT c.c_id,d.d_id,c.c_name,d.d_name,d.d_remark FROM tb_category c
INNER JOIN tb_detailed d
ON c.c_id=d.c_id
GO SELECT * FROM v_cd --*********************变量*********************
--局部变量
--如果事先不对变量赋值,变量将保持NULL的状态 --声明
DECLARE @name nvarchar(10)
DECLARE @age int
DECLARE @num int
--或者
DECLARE @name nvarchar(10),
@age int,
@num int --赋值
--1 set
SET @name = '哈哈'
--2 select
SELECT @age = 5
SELECT @num=c_id FROM tb_category WHERE c_id=1000 --打印
PRINT @name
PRINT @age
PRINT @num --变量作为条件
SELECT * FROM tb_category WHERE c_id>@num
GO --全局变量
PRINT 'SQLServer的版本'+@@VERSION
PRINT '服务器名称: '+@@SERVERNAME
PRINT '最后一次放生的错误号'+CONVERT(varchar(5),@@ERROR)
GO --*********************结构语句*********************
--IF ELSE语句
DECLARE @price MONEY
SELECT @price=AVG(p_price) FROM tb_product
IF (SELECT p_price FROM tb_product WHERE p_id=3000)>@price
BEGIN
SELECT '高价'
SELECT p_name,p_price FROM tb_product WHERE p_id=3000
END
ELSE
BEGIN
SELECT '低价'
SELECT p_name,p_price FROM tb_product WHERE p_id=3000
END
GO --IF EXISTS()语句 --条件
IF EXISTS(SELECT AVG(p_price) FROM tb_product)
PRINT 'haha' IF EXISTS(SELECT p_price FROM tb_product WHERE p_price>100)
PRINT 'haha' DECLARE @price MONEY
SELECT @price=AVG(p_price) FROM tb_product
IF EXISTS(SELECT p_name,p_price FROM tb_product WHERE p_price>@price)
BEGIN
SELECT '高价',p_name,p_price FROM tb_product WHERE p_price>@price
END
ELSE
BEGIN
SELECT '低价',p_name,p_price FROM tb_product WHERE p_price<@price
END
GO --WHILE()语句 [WHILE(1=1)条件永远为真] --*********************事务*********************
BEGIN TRANSACTION
/*--定义变量,用于累计事务执行过程中的错误--*/
DECLARE @errorSum INT
SET @errorSum=0 --初始化为0,即无错误
/*--转账product:百合花多10支,剑兰少10支*/
UPDATE tb_product SET p_number=p_number+10
WHERE p_name LIKE '百合%'
SET @errorSum=@errorSum+@@error
UPDATE tb_product SET p_number=p_number-10
WHERE p_name LIKE '剑兰%'
SET @errorSum=@errorSum+tb_product --累计是否有错误
IF @errorSum>0
BEGIN
ROLLBACK TRANSACTION
SELECT '失败'
END
ELSE
BEGIN
COMMIT TRANSACTION
SELECT '成功'
End --*********************分页语句*********************
DECLARE @pageSize int,
@pageIndex int
SELECT @pageSize=3,
@pageIndex=1
BEGIN
SELECT TOP (@pageSize) p_id,p_price,p_name FROM tb_product
WHERE p_id NOT IN
(
SELECT TOP ((@pageIndex-1)*@pageSize) p_id FROM tb_product ORDER BY p_id DESC
)
ORDER BY p_id DESC
END --*********************存储过程*********************
--PROCEDURE 简写 PROC
--EXECUTE 简写 EXEC --系统存储过程
--列出服务器上的所有数据库。
EXEC sp_databases
--显示默认值、未加密的存储过程、用户定义的存储过程、触发器或视图的实际文本
EXEC sp_helptext 'v_cd' --视图
EXEC sp_helptext 'proGetPageData'--存储过程
EXEC sp_helptext 'f' --触发器
--查看某个表的所有信息
EXEC sp_help 'tb_product' --自定义存储过程 --编写分页存储过程[采用子查询]
--@pageSize 页容量[一页显示几条数据]
--@pageIndex 第几页
ALTER PROCEDURE proGetPageData
@pageSize int=3,
@pageIndex int=1
AS
DECLARE @sqlStr varchar(300)
SET @sqlStr='select top '+
str(@pageSize)+' * from tb_product where p_id not in(select top '+
str((@pageIndex-1)*@pageSize)+
' p_id from tb_product order by p_id)order by p_id'
PRINT @sqlStr
EXEC(@sqlStr) --调用存储过程[三种方式]
EXEC proGetPageData --调用含有默认参数的
EXECUTE proGetPageData 3,1 --调用传参的
EXEC proGetPageData @pageSize=3,@pageIndex=2 --调用传值的
EXEC proGetPageData @pageSize=10 --pageSize自定义,pageIndex采用默认值 --采用输出参数的存储过程
--@pageCount 总页数 @rowCount 总行数
ALTER PROC [dbo].[proGetPageData2]
@pageIndex int=1,
@pageSize int=3,
@pageCount int OUTPUT,
@rowCount int OUTPUT
AS
BEGIN
DECLARE @sqlStr nvarchar(300),@sqlCount nvarchar(300)
SET @sqlCount = 'SELECT @rowCount=COUNT(p_id),@pageCount=CEILING((COUNT(p_id)+0.0)/'+ CAST(@pageSize AS VARCHAR)+') FROM tb_product'
PRINT @sqlCount
EXEC SP_EXECUTESQL @sqlCount,N'@rowCount INT OUTPUT,@pageCount INT OUTPUT',@rowCount OUTPUT,@pageCount OUTPUT
SET @sqlStr='select top '+
str(@pageSize)+' * from tb_product where p_id not in(select top '+
str((@pageIndex-1)*@pageSize)+
' p_id from tb_product order by p_id)order by p_id'
PRINT @sqlStr
EXEC(@sqlStr)
END DECLARE @pc int
DECLARE @rc int
EXEC [proGetPageData2] 1,3,@pc OUTPUT,@rc OUTPUT
SELECT @pc,@rc --简单查询语句存储过程
CREATE PROCEDURE proGetPageData_user
@u_id int
AS
BEGIN
SELECT * FROM tb_user WHERE u_id=@u_id
END EXEC proGetPageData_user 1 --*********************函数*********************
--系统函数
SELECT LEN('')
SELECT DATALENGTH('')
SELECT GETDATE() --自定义函数 --分页函数[子查询]
--内联表值函数[返回值为表格]
CREATE FUNCTION funGetPageData(@pageSize int,@pageIndex int)
RETURNS TABLE
AS
RETURN
(
SELECT TOP (@pageSize) p_id,p_price,p_name FROM tb_product
WHERE p_id NOT IN(SELECT TOP ((@pageIndex-1)*@pageSize) p_id FROM tb_product ORDER BY p_id DESC )
ORDER BY p_id DESC
)
--标量值函数[返回值为int]
CREATE FUNCTION demo(@a int,@b int)
RETURNS int
AS
BEGIN
RETURN (@a+@b)
END --调用函数
SELECT * FROM dbo.funGetPageData(3,1)
PRINT dbo.demo(1,2) --*********************触发器*********************
--tb_product表更新触发器
--IF UPDATE(列名)检查是否更新了某一列,用于 insert 或 update,不能用于 delete。例:
CREATE TRIGGER f
ON tb_product
FOR UPDATE
AS
IF UPDATE(p_name) or UPDATE(p_remark)
PRINT 'tb_product表name和remark更新了'

游标、临时表:

--游标
declare @d_name varchar(max)
declare @d_remark varchar(max)
declare @d_price varchar(20)
declare @d_number varchar(4)
declare @count int
set @count = 0
declare yb cursor
for(select p_name,p_remark,p_price,p_number from tb_product)
open yb
fetch next from yb into @d_name,@d_remark,@d_price,@d_number
while (@@FETCH_STATUS = 0)
begin
print '花名: '+@d_name
print '备注: '+@d_remark
print '价格: '+@d_price
print '编号: '+@d_number
print '--------------------------'
set @count = @count + 1
fetch next from yb into @d_name,@d_remark,@d_price,@d_number
end
close yb
deallocate yb
print '总数:'+cast(@count as varchar) select count(*) from tb_product --临时表
select * from tb_product
create table #wyk(pname varchar(200))
insert into #wyk values('啊啊')
select * from #wyk
drop table #wyk

临时表与表变量:

http://www.cnblogs.com/zhuawang/archive/2008/05/31/1211196.html
                       http://www.cnblogs.com/freshman0216/archive/2010/11/14/1868672.html

游标:

http://www.cnblogs.com/moss_tan_jun/archive/2011/11/26/2263988.html

详情:http://www.cnblogs.com/hoojo/category/276251.html

T-SQL应用,视图、存储过程、触发器、游标、临时表等的更多相关文章

  1. [SQL SERVER系列]存储过程,游标和触发器实例[原创]

    自己写的存储过程与游标结合使用的实例,与大家分享,也供自己查阅,仅供参考: --使用游标循环处理,删除重复的记录 declare @UserID int ) ) declare @UnitFlag i ...

  2. MySQL笔记---视图,存储过程, 触发器的使用入门

    大二学数据库的时候,只是隐约听到老师提起过视图啊,存储过程啊,触发器啊什么的,但只是淡淡的记住了名字,后来自己做些小项目,小程序,也没有用上过,都只是简单的建表,关联表之类的,导致我对这些东西的理解只 ...

  3. sql之视图、触发器、函数、存储过程、事务

    视图 # 视图也是一张表,但在data文件里只有表结构,没有表数据 # 不建议使用,扩展性差,程序需改变时,依赖的视图也要改变 # 视图牵涉到多张表时,视图中的记录不能修改. create view ...

  4. Oracle-序列-存储过程-视图-索引-触发器

    课程介绍 1. 约束(掌握) 2. 序列(掌握) 3. 索引(掌握) 4. 视图(掌握) 5. 存储过程(掌握) 6. 自定义函数(掌握) 7. 触发器(掌握) 数据库对象的命名规则 1.对象名称必须 ...

  5. SQL学习笔记七之MySQL视图、触发器、事务、存储过程、函数

    阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名 ...

  6. 刷新SQL Server所有视图、函数、存储过程 更多 sql 此脚本用于在删除或添加字段时刷新相关视图,并检查视图、函数、存储过程有效性。 [SQL]代码 --视图、存储过程、函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR SCROLL DYNAMIC FO

    刷新SQL Server所有视图.函数.存储过程 更多   sql   此脚本用于在删除或添加字段时刷新相关视图,并检查视图.函数.存储过程有效性. [SQL]代码 --视图.存储过程.函数名称 DE ...

  7. 查看SQL SERVER 加密存储过程,函数,触发器,视图

    原文:查看SQL SERVER 加密存储过程,函数,触发器,视图 create  PROCEDURE sp_decrypt(@objectname varchar(50))ASbeginset noc ...

  8. MySQL— 索引,视图,触发器,函数,存储过程,执行计划,慢日志,分页性能

    一.索引,分页性能,执行计划,慢日志 (1)索引的种类,创建语句,名词补充(最左前缀匹配,覆盖索引,索引合并,局部索引等): import sys # http://www.cnblogs.com/w ...

  9. Oracle PL/SQL异常、存储过程和触发器

    一.异常 1.处理异常 (1)除数不为0 declare b number; begin b:; exception when zero_divide then dbms_output.put_lin ...

  10. mysql六:mysql内置功能(视图、触发器、事务、存储过程、函数)

    一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 通过使用视图可以把查询过程中的 ...

随机推荐

  1. jQuery-瀑布流 布局 (处理页面滚动和AJAX加载延迟问题)

    瀑布流:这种布局适合于小数据块,每个数据块内容相近且没有侧重.通常,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部. 一.功能分析: 1.判断图片是否进入可视区域: 2.用AJAX ...

  2. JavaScript 的DOM操作

    HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. Windows 对象操作 ...

  3. Java核心技术卷1Chapter7笔记 图形程序设计

    Swing是指被绘制的用户界面类,AWT是指像事件处理这样的窗口工具箱的底层机制. SWT,JavaFX是可能的代替技术. 创建框架 在Java中,顶层窗口(就是没有包含在其他窗口中的窗口)被称为框架 ...

  4. VBA基础——循环语句

    VBA基础之循环语句 Sub s1() Dim rg As Range For Each rg In Range("a1:b7,d5:e9") If rg = "&quo ...

  5. JavaSE复习日记 : 循环终止语句(break/break outerFor/continue)

    最近没网,但攒了几天的博客,这次逮到机会发博客,直接三篇走起; /* * 循环终止语句: break/ break outerFor/ continue */ /* * break语句 * 1. 用于 ...

  6. ShowDialog()弹出的窗体,关闭后,主窗体会闪烁的BUG

    如图,要实现下列等待界面时,等待界面是以ShowDialog弹出的,发现关闭后,主窗体会闪烁一下的BUG,搞半天没搞明白啥原因. 过了几天后,搜索了下发现,在fm.ShowDialog(),显示出来时 ...

  7. SharedPreferences最佳实践

    转:http://blog.csdn.net/xushuaic/article/details/24513599 笔记摘要:该文章是我在Android Weekly中看到的,以前也一直用SharedP ...

  8. PhotoShop-CS4使用-----如何对psd进行简单切图

    一.如何快速截图 1.如果图片为psd样式   2.要用放大器放大该图,选择放大器,放大后如图 3.开始切图  以其中一个为例,选中你所要选择切的图片 4. 选中后 5.选择文件---新建   6.此 ...

  9. sql查询数据库表中重复记录方法

    1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 代码如下: select * from people where peopleId in (select peopleId ...

  10. 常用Vxworks编程API

    vxWorks编程API 一.官方的Program Guide 位于安装目录下:\docs\vxworks\guide\index.html 二.常用的库: #i nclude "taskL ...