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)-变量、函数、存储过程等的更多相关文章

  1. SQL基础随记2 视图 存储过程

    SQL基础随记2 视图 存储过程   View CREATE/ALTER/DROP VIEW ViewName as SELECT(...) 可以在视图的基础上继续创建视图,即,将之前创建的视图当做表 ...

  2. SQL基础系列(2)-内置函数--转载w3school

    1.    日期函数 Mssql: SELECT GETDATE() 返回当前日期和时间 SELECT DATEPART(yyyy,OrderDate) AS OrderYear, DATEPART( ...

  3. Sql Server系列:字符串函数

    字符串函数用于对字符和二进制字符串进行各种操作,大多数字符串函数只能作用于char.nchar.varchar和nvarchar数据类型.字符串函数可以用在SELECT或者WHERE语句中. 1. A ...

  4. JavaScript基础系列(变量与类型)

    以下内容将JavaScript简称为JS 打开本文时不管你是零基础的初学者还是其他语言的老兵,我都想说程序语言的基础支撑起了整个网络世界,不把这些基础学透之后稍复杂的内容会让你寸步难行. 现在先给编程 ...

  5. Sql Server系列:排序函数

    在SQL Server中有4个排序函数:ROW_NUMBER().RANK().DENSE_RANK()及NTILE()函数. 1. ROW_NUMBER()函数 ROW_NUMBER()函数为每条记 ...

  6. Sql Server系列:自定义函数

    用户自定义函数可以像系统函数一样在查询或存储过程中调用,可以接受参数.执行操作并将操作结果以值的形式返回.返回值可以是单个标量或结果集. 1. 标量函数 标量函数返回一个确定类型的标量值,对于多语句的 ...

  7. 11、SQL基础整理(变量)

    变量 定义变量:declare  @hello  varchar(20) 赋值:set  @hello = ‘你好’ select(结果框显示)/print(消息框显示) @hello *三行必须同时 ...

  8. 5、SQL基础整理(字符串函数)

    字符串函数 ASCII 返回字符串首字母的ascii编码 select ASCII('name') select ASCII(name) from xuesheng select *from xues ...

  9. [SQL SERVER系列]之常用函数和开窗函数介绍及实例

    本文主要介绍SQL SERVER数据库中一些常用的系统函数及其SQL SERVER 2005以上支持的开窗函数. 1.常用函数 --从字符串右边截取指定字符数 select RIGHT('HELLO' ...

随机推荐

  1. Python科学计算库SymPy初探

    SymPy基础应用 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bord ...

  2. 面向对象第四单元(UML)及期末总结

    前言 统一建模语言(英语:Unified Modeling Language,缩写 UML),是软件架构设计建模和规约的语言. 在UML系统开发中有三个主要的模型: 功能模型:从用户的角度展示系统的功 ...

  3. [前端开发]Vue组件化的思想

    组件化的思想 将一个页面中的处理逻辑放在一起,处理起来就会很复杂,不利于后续管理和扩展. 如果将页面拆分成一个个小的功能块,每个功能块实现自己的内容,之后对页面的管理和维护就变得很容易了. 注册组件的 ...

  4. 微信开发+百度AI学习:环境搭建

    注册成为百度开发者,百度接入指南http://ai.baidu.com/docs#/Begin/top 选择分类进去创建应用,接口权限全部选择好了,这样就可以只创建一个应用就有全部接口权限. C#开发 ...

  5. FTP服务器与客户端的安装与配置

    FTP服务器安装与配置 1. 切换到root用户:  su root 2. 查看系统中是否安装了vsftpd,可以通过执行命令 :  rpm -qa | grep vsftpd 3. 如果没有安装 v ...

  6. 大型Java进阶专题(五) 设计模式之单例模式与原型模式

    前言 ​ 今天开始我们专题的第四课了,最近公司项目忙,没时间写,今天抽空继续.上篇文章对工厂模式进行了详细的讲解,想必大家对设计模式合理运用的好处深有感触.本章节将介绍:单例模式与原型模式.本章节参考 ...

  7. [转载]float 和 double 的一二三点事

    文章转载于博客园作者jillzhang,原文链接http://jillzhang.cnblogs.com/ .文章为jillzhang原创,转载条件请看原文链接. 关于浮点数精度和范围,请看末尾. C ...

  8. TensorFlow 基本变量定义,基本操作,矩阵基本操作

    使用 TensorFlow 进行基本操作的实例,这个实例主要是使用 TensorFlow 进行了加法运算. 包括使用 constant 常量进行加法运算和使用 placeholder 进行变量加法运算 ...

  9. OpenCV-Python 读取显示视频 | 六

    目标 学习读取视频,显示视频和保存视频. 学习从相机捕捉并显示它. 你将学习以下功能:cv.VideoCapture(),cv.VideoWriter() 从相机中读取视频 通常情况下,我们必须用摄像 ...

  10. TensorFlow系列专题(十三): CNN最全原理剖析(续)

    目录: 前言 卷积层(余下部分) 卷积的基本结构 卷积层 什么是卷积 滑动步长和零填充 池化层 卷积神经网络的基本结构 总结 参考文献   一.前言 上一篇我们一直说到了CNN[1]卷积层的特性,今天 ...