一、定义变量

--简单赋值
declare @a int
set @a=5
print @a   --使用select语句赋值
declare @user1 nvarchar(50)
select @user1='张三'
print @user1
declare @user2 nvarchar(50)
select @user2 = Name from ST_User where ID=1
print @user2   --使用update语句赋值
declare @user3 nvarchar(50)
update ST_User set @user3 = Name where ID=1
print @user3

二、表、临时表、表变量

--创建临时表1
create table #DU_User1
(      [ID] [int]  NOT NULL,      [Oid] [int] NOT NULL,      [Login] [nvarchar](50) NOT NULL,      [Rtx] [nvarchar](4) NOT NULL,      [Name] [nvarchar](5) NOT NULL,      [Password] [nvarchar](max) NULL,      [State] [nvarchar](8) NOT NULL
);
--向临时表1插入一条记录
insert into #DU_User1 (ID,Oid,[Login],Rtx,Name,[Password],State) values (100,2,'LS','0000','临时','321','特殊');   --从ST_User查询数据,填充至新生成的临时表
select * into #DU_User2 from ST_User where ID<8   --查询并联合两临时表
select * from #DU_User2 where ID<3 union select * from #DU_User1   --删除两临时表
drop table #DU_User1
drop table #DU_User2
--创建临时表
CREATE TABLE #t
(     [ID] [int] NOT NULL,     [Oid] [int] NOT NULL,     [Login] [nvarchar](50) NOT NULL,     [Rtx] [nvarchar](4) NOT NULL,     [Name] [nvarchar](5) NOT NULL,     [Password] [nvarchar](max) NULL,     [State] [nvarchar](8) NOT NULL,
)   --将查询结果集(多条数据)插入临时表
insert into #t select * from ST_User
--不能这样插入
--select * into #t from dbo.ST_User   --添加一列,为int型自增长子段
alter table #t add [myid] int NOT NULL IDENTITY(1,1)
--添加一列,默认填充全球唯一标识
alter table #t add [myid1] uniqueidentifier NOT NULL default(newid())   select * from #t
drop table #t
--给查询结果集增加自增长列   --无主键时:
select IDENTITY(int,1,1)as ID, Name,[Login],[Password] into #t from ST_User
select * from #t   --有主键时:
select (select SUM(1) from ST_User where ID<= a.ID) as myID,* from ST_User a order by myID
--定义表变量
declare @t table
(     id int not null,     msg nvarchar(50) null
)
insert into @t values(1,'1')
insert into @t values(2,'2')
select * from @t

三、循环

--while循环计算1到100的和
declare @a int
declare @sum int
set @a=1
set @sum=0
while @a<=100
begin     set @sum+=@a     set @a+=1
end
print @sum

四、条件语句

--if,else条件分支
if(1+1=2)
begin     print '对'
end
else
begin     print '错'
end   --when then条件分支
declare @today int
declare @week nvarchar(3)
set @today=3
set @week=case     when @today=1 then '星期一'     when @today=2 then '星期二'     when @today=3 then '星期三'     when @today=4 then '星期四'     when @today=5 then '星期五'     when @today=6 then '星期六'     when @today=7 then '星期日'     else '值错误'
end
print @week

五、游标

declare @ID int
declare @Oid int
declare @Login varchar(50)   --定义一个游标
declare user_cur cursor for select ID,Oid,[Login] from ST_User
--打开游标
open user_cur
while @@fetch_status=0
begin
--读取游标     fetch next from user_cur into @ID,@Oid,@Login     print @ID     --print @Login
end
close user_cur
--摧毁游标
deallocate user_cur

六、触发器

触发器中的临时表:

Inserted
  存放进行insert和update 操作后的数据
Deleted
  存放进行delete 和update操作前的数据

--创建触发器
Create trigger User_OnUpdate     On ST_User     for Update
As     declare @msg nvarchar(50)     --@msg记录修改情况     select @msg = N'姓名从“' + Deleted.Name + N'”修改为“' + Inserted.Name + '”' from Inserted,Deleted     --插入日志表     insert into [LOG](MSG)values(@msg)       --删除触发器
drop trigger User_OnUpdate

七、存储过程

--创建带output参数的存储过程
CREATE PROCEDURE PR_Sum     @a int,     @b int,     @sum int output
AS
BEGIN     set @sum=@a+@b
END   --创建Return返回值存储过程
CREATE PROCEDURE PR_Sum2     @a int,     @b int
AS
BEGIN     Return @a+@b
END       --执行存储过程获取output型返回值
declare @mysum int
execute PR_Sum 1,2,@mysum output
print @mysum   --执行存储过程获取Return型返回值
declare @mysum2 int
execute @mysum2= PR_Sum2 1,2
print @mysum2

八、自定义函数

函数的分类:

    1)标量值函数

    2)表值函数

        a:内联表值函数

        b:多语句表值函数

    3)系统函数

--新建标量值函数
create function FUNC_Sum1
(     @a int,     @b int
)
returns int
as
begin     return @a+@b
end   --新建内联表值函数
create function FUNC_UserTab_1
(     @myId int
)
returns table
as
return (select * from ST_User where ID<@myId)   --新建多语句表值函数
create function FUNC_UserTab_2
(     @myId int
)
returns @t table
(     [ID] [int] NOT NULL,     [Oid] [int] NOT NULL,     [Login] [nvarchar](50) NOT NULL,     [Rtx] [nvarchar](4) NOT NULL,     [Name] [nvarchar](5) NOT NULL,     [Password] [nvarchar](max) NULL,     [State] [nvarchar](8) NOT NULL
)
as
begin     insert into @t select * from ST_User where ID<@myId     return
end   --调用表值函数
select * from dbo.FUNC_UserTab_1(15)
--调用标量值函数
declare @s int
set @s=dbo.FUNC_Sum1(100,50)
print @s   --删除标量值函数
drop function FUNC_Sum1

谈谈自定义函数与存储过程的区别:

一、自定义函数:

  1. 可以返回表变量

  2. 限制颇多,包括

    不能使用output参数;

    不能用临时表;

    函数内部的操作不能影响到外部环境;

    不能通过select返回结果集;

    不能update,delete,数据库表;

  3. 必须return 一个标量值或表变量

  自定义函数一般用在复用度高,功能简单单一,争对性强的地方。

二、存储过程

  1. 不能返回表变量

  2. 限制少,可以执行对数据库表的操作,可以返回数据集

  3. 可以return一个标量值,也可以省略return

   存储过程一般用在实现复杂的功能,数据操纵方面。

原文链接:http://www.cnblogs.com/lipan/archive/2010/12/09/1892516.html

SQL Server编程(04)基本语法【转载】的更多相关文章

  1. Oracle与SQL SERVER编程差异分析(入门)

    网上有关Oracle与SQL SERVER性能差异的文章很多,结论往往是让你根据数据量与预算来选择数据库.但实际项目中,特别是使用 .Net 开发的系统,支持以上两种数据库或者更多已经成为Boss的普 ...

  2. SQL Server编程系列(2):SMO常用对象的有关操作

    原文:SQL Server编程系列(2):SMO常用对象的有关操作 在上一篇周公简单讲述了SMO的一些基本概念,实际上SMO体系结构远不止周公在上一篇中讲述的那么简单,下图是MSDN上给出的一个完整的 ...

  3. SQL Server编程系列(1):SMO介绍

    原文:SQL Server编程系列(1):SMO介绍 续篇:SQL Server编程系列(2):SMO常用对象的有关操作 最近在项目中用到了有关SQL Server管理任务方面的编程实现,有了一些自己 ...

  4. (转) SQL Server编程系列(1):SMO介绍

    最近在项目中用到了有关SQL Server管理任务方面的编程实现,有了一些自己的心得体会,想在此跟大家分享一下,在工作中用到了SMO/SQL CLR/SSIS等方面的知识,在国内这方面的文章并不多见, ...

  5. [转]SQL Server编程:SMO介绍

    转自:周公 最近在项目中用到了有关SQL Server管理任务方面的编程实现,有了一些自己的心得体会,想在此跟大家分享一下,在工作中用到了SMO/SQL CLR/SSIS等方面的知识,在国内这方面的文 ...

  6. SQL Server编程入门

    SQL编程要比Java编程.C#编程简单许多,下面我们直接讲干货21:04:31 使用变量 局部变量 在T-SQL中,局部变量的名称必须以标记@作为前缀.T-SQL的局部变量其实和Java中的局部变量 ...

  7. SQL Server 编程入门

    一.T—SQL 的组成 1.DML(数据操作语言 Data Manipulation Language) 查询.插入.删除和修改数据库中的数据.SELECT.INSERT.UPDATE.DELETE ...

  8. SQL Server编程(06)触发器

    SQL Server 通过触发器用来保证业务逻辑和数据的完整性.在SQL Server中,触发器是一种特殊类型的存储过程,可在执行语言事件时自动触发.SQL Server中触发器包括三种:DML触发器 ...

  9. SQL Server编程(02)自定义函数

    在编程过程中,我们通常把特定的功能语句块封装称函数,方便代码的重用.我们可以在SQL Server中自定义函数,根据函数返回值的区别,我们自定义的函数分两种:标量值函数和表值函数. 自定义函数的优点: ...

  10. sql server 行转列(转载)

    SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...

随机推荐

  1. fir2(n,f,m)

    编辑 函数fir2用来设计多通带任意响应FIR滤波器,该滤波器的幅频特性由向量对f和m确定,f为归一化频率向量,m为对应频率点上的幅度.当设计的滤波器在频率为π的幅度响应不是0时,滤波器的阶数n为偶数

  2. JavaScript学习笔记-new Date() 与 Date() 的区别

    var today1 = Date() //返回一个字符串(string),没有getDate等日期对象方法,内容为当前时间 var today2 = new Date() //返回一日期对象,内容为 ...

  3. 记一次使用命令行启动部署在tomcat上的应用

    在Eclipes进行程序开发完成后,一般都会直接在Eclipse部署启动,其中的一些启动参数设置都会在其中进行,若用命令行启动,则需要手动配置. 程序开发完成后打成的war包,需要部署到Tomcat应 ...

  4. Eclipse利用Maven2搭建SpringMVC框架的Web工程

    一.准备工作: 下载apache-maven--> 配置Maven_home -->下载Eclipse Maven插件 二.新建工程:   选择新建Maven Project  arche ...

  5. scrollTop和offsetTop的区别,scrollTopLeft和offsetLeft的区别

    scrollTop和offsetTop的区别:scrollTop是指某个可滚动区块向下滚动的距离,比如向下滚动了10个像素,那么这个元素的scrollTop属性值就是10,这个属性的值是可读写的,且不 ...

  6. 页面切换语言包使用session不用cookie

    cookie的问题,ifame中的cookie不一致 在父页面设置的语言包cookie,在iframe中获取不到.为什么呢? 为什么语言包这个事跟cookie过不去,有什么特殊的? iframe的sr ...

  7. Bete冲刺第二阶段

    Bete冲刺第二阶段 今日工作: web: 修复了a版本中接口数据返回错误的问题.通知对数据表新增了几个字段.并且新增了一个通知查询的接口. ios: 修正网络连接bug 招募功能界面完成但是跳转问题 ...

  8. PHP Apache 配置伪静态

    1.首先是开启rewrite_module(如何开启,百度搜索) 2.创建.htaccess文件(如何创建,百度搜索) 3.在.htaccess文件中打开重写服务:RewriteEngine On 4 ...

  9. android之二维码扫描的实现

    二维码扫描引擎有 ZBar 和ZXing 一. 使用开源ZXing扫描的缺点 1.原始代码是横屏模式,尽管可以改成竖屏,但是扫描界面的自定义和多屏幕适配不好做 2.有效扫描区域不好控制,可能是我自己技 ...

  10. JVM学习之jstat使用方法

    Jstat是JDK自带的一个轻量级工具,主要用JVM内建的指令对java应用程序的资源和性能进行实时的监控. 基本语法 jstat <option> [-t] [-h] <pid&g ...