SQL基础系列(3)-变量、函数、存储过程等
1. 变量
定义变量 DECLARE @a INT 赋值 SET @a=1 PRINT @a DECLARE @name NVARCHAR(30) --select 赋值 SELECT @name='zcx' PRINT @name SELECT @name=FirstName FROM dbo.Persons PRINT @name DECLARE @name NVARCHAR(50) --update 赋值 UPDATE Persons SET @name = FirstName WHERE ID = 1 PRINT @name
2. 临时表
--创建临时表1
create table #persion ( [id] [int] NOT NULL, [name] [nvarchar](5) NOT NULL, [pwd] [nvarchar](20) NULL ) insert into #persion values(1,'zcx','') SELECT * INTO #psersion1 FROM #persion select * from #persion UNION ALL select * from #psersion1 DROP TABLE #persion DROP TABLE #psersion1
插入select的数据
insert into #persion select id,FirstName,LastName from dbo.Persons
注意和select into的区别
Select into 会创建新的临时表
修改临时表结构
alter table #persion add [tmpid] int NOT NULL IDENTITY(10,1)
alter table #persion add [tmpid1] uniqueidentifier NOT NULL default(newid())
给查询结果集增加自增长列
要求主表Persons没得主键
select IDENTITY(int,1,1)as ID, * into #temp from Persons
SELECT * FROM #temp
和count性质类似
select SUM(1) from Persons
有主键的表添加列
select (select SUM(1) from Persons where id<= a.id) as myID,* from Persons a order by myID
创建表变量:下面代码要同时执行
declare @mytable table ( id int not null, name nvarchar(50) null ) INSERT INTO @mytable ( id, name ) VALUES ( 0, -- id - int N'zcx' -- name - nvarchar(50) ) INSERT INTO @mytable ( id, name ) VALUES ( 0, -- id - int N'zjj' -- name - nvarchar(50) ) select * from @mytable
3. 循环
DECLARE @index INT DECLARE @resukt INT SET @index = 1 SET @resukt = 0 WHILE @index <= 100 BEGIN SET @resukt += @index SET @index += 1 END PRINT @resukt
4. 条件
IF ( 3 > 5 ) BEGIN PRINT 'true' END ELSE BEGIN PRINT 'false' END When then DECLARE @num INT DECLARE @name NVARCHAR(30) SET @num = 3 SET @name = CASE WHEN @num = 1 THEN 'elephant' WHEN @num = 2 THEN 'hippo' WHEN @num = 3 THEN 'trigger' ELSE 'false' END PRINT @name
5. 游标
原则上尽量不要使用游标
(更多信息:http://www.cnblogs.com/moss_tan_jun/archive/2011/11/26/2263988.html)
DECLARE @name NVARCHAR(30)
DECLARE mycursor CURSOR FOR SELECT FirstName FROM dbo.Persons
--打开游标
OPEN mycursor WHILE @@FETCH_STATUS=0 BEGIN FETCH NEXT FROM mycursor INTO @name PRINT @name END CLOSE mycursor --回收 DEALLOCATE mycursor
6. 触发器
触发器中的临时表:
Inserted
存放进行insert和update 操作后的数据
Deleted
存放进行delete 和update操作前的数据
Create trigger persion_update On dbo.Persons for Update As declare @msg nvarchar(50) --@msg记录修改情况 select @msg = N'姓名从“' + Deleted.FirstName + N'”修改为“' + Inserted.FirstName + '”' from Inserted,Deleted --插入日志表 insert into TAB(Col2)values(@msg)
7. 存储过程
DROP PROCEDURE compute_add CREATE PROCEDURE compute_add @p1 INT , @p2 INT , @p3 INT OUTPUT AS BEGIN SET @p3=@p1+@p2 END DECLARE @result INT EXEC compute_add 1,2,@result OUTPUT PRINT @result
8. 函数
标量函数
CREATE FUNCTION COMPUTE_ADD ( @p1 INT, @p2 INT ) RETURNS INT AS BEGIN RETURN @p1+@p2 END
调用方式
DECLARE @result INT
SET @result=dbo.COMPUTE_ADD(1,2)
PRINT @result
表值函数
CREATE FUNCTION mytable ( @id INT ) RETURNS TABLE AS RETURN ( SELECT * FROM dbo.Persons WHERE id < @id )
调用方式
select * from dbo.mytable(3)
表值函数:返回指定的列
CREATE FUNCTION mytable ( @id INT ) RETURNS @table TABLE ( firstname NVARCHAR(50) , lastname NVARCHAR(50) ) AS BEGIN INSERT INTO @table SELECT firstname , lastname FROM dbo.Persons WHERE id < @id RETURN END
调用方式
select * from dbo.mytable(3)
函数和存储过程区别
函数 |
存储过程 |
可以返回表变量 |
不能返回表变量 |
不能使用output参数 |
可以使用output参数 |
不能用临时表 |
可以执行对数据库表的操作,可以返回数据集 |
函数内部的操作不能影响到外部环境 |
|
不能通过select返回结果集 |
|
不能update,delete,数据库表(在函数内对带副作用的运算符 'UPDATE' 的使用无效。) |
|
必须return 一个标量值或表变量或空 |
可以return一个标量值,也可以省略return |
SQL基础系列(3)-变量、函数、存储过程等的更多相关文章
- SQL基础随记2 视图 存储过程
SQL基础随记2 视图 存储过程 View CREATE/ALTER/DROP VIEW ViewName as SELECT(...) 可以在视图的基础上继续创建视图,即,将之前创建的视图当做表 ...
- SQL基础系列(2)-内置函数--转载w3school
1. 日期函数 Mssql: SELECT GETDATE() 返回当前日期和时间 SELECT DATEPART(yyyy,OrderDate) AS OrderYear, DATEPART( ...
- Sql Server系列:字符串函数
字符串函数用于对字符和二进制字符串进行各种操作,大多数字符串函数只能作用于char.nchar.varchar和nvarchar数据类型.字符串函数可以用在SELECT或者WHERE语句中. 1. A ...
- JavaScript基础系列(变量与类型)
以下内容将JavaScript简称为JS 打开本文时不管你是零基础的初学者还是其他语言的老兵,我都想说程序语言的基础支撑起了整个网络世界,不把这些基础学透之后稍复杂的内容会让你寸步难行. 现在先给编程 ...
- Sql Server系列:排序函数
在SQL Server中有4个排序函数:ROW_NUMBER().RANK().DENSE_RANK()及NTILE()函数. 1. ROW_NUMBER()函数 ROW_NUMBER()函数为每条记 ...
- Sql Server系列:自定义函数
用户自定义函数可以像系统函数一样在查询或存储过程中调用,可以接受参数.执行操作并将操作结果以值的形式返回.返回值可以是单个标量或结果集. 1. 标量函数 标量函数返回一个确定类型的标量值,对于多语句的 ...
- 11、SQL基础整理(变量)
变量 定义变量:declare @hello varchar(20) 赋值:set @hello = ‘你好’ select(结果框显示)/print(消息框显示) @hello *三行必须同时 ...
- 5、SQL基础整理(字符串函数)
字符串函数 ASCII 返回字符串首字母的ascii编码 select ASCII('name') select ASCII(name) from xuesheng select *from xues ...
- [SQL SERVER系列]之常用函数和开窗函数介绍及实例
本文主要介绍SQL SERVER数据库中一些常用的系统函数及其SQL SERVER 2005以上支持的开窗函数. 1.常用函数 --从字符串右边截取指定字符数 select RIGHT('HELLO' ...
随机推荐
- 【Weiss】简单说一下这一分类下的东西
主要是学习资料<数据结构与算法分析>(Weiss)的习题 除去习题外,每一章主要用到的数据结构先会写一个版本放上来,包括数据结构代码与测试用代码 这种先行上传的代码只具有基本的功能,毕竟一 ...
- 网络安全从入门到精通(第二章-3)后端基础SQL— MySQL高级查询与子查询
本文内容: MySQL的基础查询语句 链接查询 联合查询 子查询 渗透测试常用函数 1,MySQL基础查询语句: select * from 表 order by ASC/DESC; ASC:从小到 ...
- angular http 节流
有时候点列表但是由于查询问题,后端返回数据的速度很慢,导致回来的顺序错乱,后端解决不了,前端来 在jq年代 像标志位 防抖 节流等 在angular里使用了rxjs //错误示范 getIntelli ...
- Head First设计模式——桥接模式
桥接模式 桥接模式:不只改变你的实现,也改变你的抽象. 如果有一个电视厂家,遥控器需要升级,电视也需要修改.这种变化部分的封装就适合使用桥接模式,桥接模式通过将实现和抽象放在两个不同的类层次中而使它们 ...
- JVM收集器简介
JVM GC收集器集合:
- Development of a High Coverage Pseudotargeted Lipidomics Method Based on Ultra-High Performance Liquid Chromatography−Mass Spectrometry(基于超高效液相色谱-质谱法的高覆盖拟靶向脂质组学方法的开发)
文献名:Development of a High Coverage Pseudotargeted Lipidomics Method Based on Ultra-High Performance ...
- 6个出色的Kubernetes发行版,哪款最适合你?
作者简介 Christopher Tozzi,自2008年来以自由职业者的身份对Linux.虚拟化.容器.数据存储及其相关主题进行报道. 本文来自Rancher Labs 时至今日,通过Kuberne ...
- python 顺序读取文件夹下面的文件(自定义排序方式)
我们在读取文件夹下面的文件时,有时是希望能够按照相应的顺序来读取,但是 file_lists=os.listdir()返回的文件名不一定是顺序的,也就是说结果是不固定的.就比如读取下面这些文件,希望能 ...
- hdu2838 cow sorting用树状数组求逆序对
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/2838/ 题目解法:题目给出一个1-n的排列,操作只有一种:交换相邻的元素,代价是两个元素之和,问将该序列变成升序 ...
- wr720n v4 折腾笔记(三):网络配置与扩充USB
0x01 前言 网络配置比较简单,但是USB拓展就麻烦许多了,这里由于overlay的内存分配问题导致软件安装失败,这里找到了一种方法就是直接从uboot刷入南浦月大神的wr720n的openwrt固 ...