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. iOS音频播放(一):概述

    (本文转自码农人生) 前言 从事音乐相关的app开发也已经有一段时日了,在这过程中app的播放器几经修改,我也因此对于iOS下的音频播放实现有了一定的研究.写这个 系列的博客目的一方面希望能够抛砖引玉 ...

  2. Fix The thread xxx has exited with code 259 (0×103)

    When run the test case in VS2013, you may encounter below problem After test case end, it will show ...

  3. memcached-session-manager的一些理解

    1.节点分配 粘性规划: Tomcat-1(t1)将session优先备份在运行在令一台机器上的memcached-2(m2)上面,仅当m2失效的时候,t1才会将sessin存储在m1上面(m1是t1 ...

  4. EC读书笔记系列之12:条款22、23、24

    条款22 将成员变量声明为private 记住: ★切记将成员变量声明为private.这可赋予客户访问数据的一致性.可细微划分访问控制.允诺约束条件获得保证,并提供class作者以充分的实现弹性. ...

  5. Java学习之Java中常用对象

    java的几种对象(PO,VO,DAO,BO,POJO)解释     一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象.最简单的PO就是对应数据库中 ...

  6. QF——iOS通知中心(NotificationCener)

    前面我们讲iOS不同界面间传值的时候,说过可以通过通知中心进行传值.那到底什么是通知中心,他是如何实现传值的呢? NSNotificationCenter是单例的,只提供了一个唯一的实例化入口,在整个 ...

  7. Ubuntu14.04(64位)安装ATI_Radeon_R7_M265显卡驱动

    电脑型号:Dell inspiron 14-5447 笔记本 显卡配置:集成显卡Intel核心显卡,Cpu是i5-4210U;独立显卡ATI_Radeon_R7_M265 网上关于ATI/Intel双 ...

  8. python 文件夹比较

    参考:http://blog.csdn.net/imzoer/article/details/8675078 文件比较:filecmp模块:filecmp '''Created on 2014-6-6 ...

  9. 使用chrome调试xpath

    使用chrome调试xpath 相信玩过爬虫的都知道一些库,如lxml(python),可以使用xpath方便地对HTML进行提取,但当真正用的时候,问题就来了,想找到一个元素往往要调试好几遍,而且得 ...

  10. uvalive 6888 Ricochet Robots bfs

    题目链接 给一个n*m的图, 图上有n个标号, n<=4, 然后有墙, 还有一个终点x. 每一步, 只能走某一个标号, 可以向四个方向走, 然后必须要碰到墙或者图的边界或者另一个标号才能停下来. ...