设为首页 收藏本站
查看: 1243|回复: 0

[经验分享] sql(SqlServer)编程基本语法

[复制链接]

尚未签到

发表于 2018-10-23 11:36:53 | 显示全部楼层 |阅读模式
  一、定义变量
  --简单赋值
  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>  print @user2
  --使用update语句赋值
  declare @user3 nvarchar(50)

  update ST_User set @user3 = Name where>  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>  --查询并联合两临时表

  select * from #DU_User2 where>  --删除两临时表
  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>  --添加一列,默认填充全球唯一标识
  alter table #t add [myid1] uniqueidentifier NOT NULL default(newid())
  select * from #t
  drop table #t
  --给查询结果集增加自增长列
  --无主键时:

  select>  select * from #t
  --有主键时:

  select (select SUM(1) from ST_User where>  --定义表变量
  declare @t table
  (

  >  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  --打开游标
  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>  --新建多语句表值函数
  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>  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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-625411-1-1.html 上篇帖子: sql 注入(自己总结) 下篇帖子: Zabbix应用之Server/Agent部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表