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. ssh 公钥 下载选择的时候 下拉选择 ssh 然后 git clone

    ssh 公钥 下载选择的时候 下拉选择 ssh 然后 git clone

  2. mysql 如果没有密码 就不能远程连接

    mysql 如果没有密码 就不能远程连接

  3. EPX-Studio调用Dll模块

    procedure TForm1.BitBtn1Click(Sender: TObject); var REP : IExcelPanelXDisp; modulePath:string; begin ...

  4. Leetcode_1048. 最长字符串链

    字符串的最长严格递增子序列,前后只能相差一个字符. 直接O(N^2)暴力建图,然后记忆化跑个最长路. 直接按字符串长度排序,然后求LIS. code1 class Solution { public: ...

  5. CORS 跨域中的 preflight 请求

    我们知道借助Access-Control-Allow-Origin响应头字段可以允许跨域 AJAX, 对于非简单请求,CORS 机制跨域会首先进行 preflight(一个 OPTIONS 请求), ...

  6. Mysql - 删除表时出现: Cannot delete or update a parent row: a foreign key constraint fails

    现象 MySQL在删除一张表时出现 ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint ...

  7. python打包为exe文件

    1.安装 pyinstaller 包 pip3 install pyinstaller 2.进入python文件目录 进入Python程序文件夹py文件处,按住shift并且右键,在弹出的选项中点击& ...

  8. Hive支持的文件格式和压缩格式及各自特点

    Hive中的文件格式 1-TEXTFILE 文本格式,Hive的默认格式,数据不压缩,磁盘开销大.数据解析开销大. 对应的hive API为:org.apache.hadoop.mapred.Text ...

  9. React Hooks 实现react-redux

    Redux 是目前 React 系统中最常用的数据管理工具,它落实并发扬了 Flux 的数据单向流动模式,被实践证明为一种成熟可用的模式. 尽管承受着一些非议,Redux 在 React 数据管理界的 ...

  10. Selenium系列(十六) - Web UI 自动化基础实战(3)

    如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...