您的位置:首页 > 数据库

SQL数据库编程基本语法

2014-03-15 14:43 429 查看

一、定义变量

  --简单赋值
  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:存进行insertupdate 操作后的数据
  Deleted:存进行deleteupdate操作前的数据
  --创建触发器
  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返回结果集;
          ·不能updatedelete,数据库表;
  3. 必须return标量或表变量
  自定义函数一般用在度高,功能简单单一,争对性的地方。
  二、存储过程
  1. 不能返回表变量
  2. 限制少,可以执行对数据库表的操作,可以返回数据集
  3. 可以return标量,也可以省略return
  存储过程一般用在实现复杂的功能,数据操纵方面。

参考内容:

http://tech.it168.com/a2012/0212/1310/000001310463_all.shtml
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: