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' ...
 
随机推荐
- Druid连接池和springJDbc框架-Java(新手)
			
Druid连接池: Druid 由阿里提供 安装步骤: 导包 durid1.0.9 jar包 定义配置文件 properties文件 名字任意位置也任意 加载文件 获得数据库连接池对象 通过Durid ...
 - tomcat启动时间5分钟左右org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [342,445] milliseconds.
			
org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance ...
 - Journal of Proteome Research | Single-Shot Capillary Zone Electrophoresis−Tandem Mass Spectrometry Produces over 4400 Phosphopeptide Identifications from a 220 ng Sample (分享人:赵伟宁)
			
Title: Single-Shot Capillary Zone Electrophoresis−Tandem Mass Spectrometry Produces over 4400 Phosph ...
 - Koadic的安装和使用
			
概述 Koadic是DEFCON分型出来的一个后渗透工具,主要通过vbscript.jscript进行大部分操作 环境准备 我准备的是两台虚拟机一台kali就是攻击机器一台windows7 64位就是 ...
 - ubuntu 16.04安装mysql server入门
			
1.安装mysql-server -> sudo apt-get install mysql-server 输入root密码即可 2.修改服务器配置 默认mysql-server只对本机访问,新 ...
 - Java进阶之心态
			
不管什么时候学习都是一个积累的过程,量变才能引起质变.一口吃一个胖子是不存在的,成长的路上没有捷径,只有学到的知识才是我们走向远方道路的基石!
 - JSON字符串带BOM头"ufeff"
			
调用三方接口返回值JSON字符串带BOM头"\ufeff",JSON解析死活报错. 我是用SpringBoot的RestTemplate调用三方接口的,一开始返回值我是用对象接收返 ...
 - 怎样设计最优的卷积神经网络架构?| NAS原理剖析
			
虽然,深度学习在近几年发展迅速.但是,关于如何才能设计出最优的卷积神经网络架构这个问题仍在处于探索阶段. 其中一大部分原因是因为当前那些取得成功的神经网络的架构设计原理仍然是一个黑盒.虽然我们有着关于 ...
 - 【动态规划】最佳加法表达式(百练oj4152)
			
总时间限制: 1000ms 内存限制: 65536kB 描述 给定n个1到9的数字,要求在数字之间摆放m个加号(加号两边必须有数字),使得所得到的加法表达式的值最小,并输出该值.例如,在1234中摆放 ...
 - iOS 架构
			
一.MVC MVC 全名 Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离 ...