SQL日常总结(SQL Server)

变量分为局部变量和全局变量

局部变量

@是SQL中标量变量开头的必须字符,SQL规定,局部标量变量必须以@开头,全局标量变量以@@开头,全局标量变量不许声明,直接使用即可

局部变量的使用是先申明再赋值。而全局变量由系统定义和维护,可以直接使用,但一般不自定义全局变量

局部变量的名称必须以标记@作为前缀

声明局部变量的语句如下:

declare @variable name(局部变量名称) DataType(数据类型)

局部变量赋值有两种方法:使用set语句或select语句

例:

整型:

declare @num int
set @num=10
print 'num的值是:'+convert(nvarchar(32),@num)

字符串类型:(char varchar nvarchar)

declare @name nvarchar(32)
set @name='赵六'
print @name

小数类型(float decimal numeric(18,0))

declare @number decimal(18,2)
set @number=1.3
print @number

日期类型(datetime)

declare @mydate datetime
set @mydate=GETDATE()
print convert(nvarchar(32),@mydate,120)

全局变量

SqlServer中的所有全局变量都使用两个@符号作为前缀

@@IDENTITY是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。

声明局部变量的语句如下:

declare @variable name(局部变量名称) DataType(数据类型)

局部变量赋值有两种方法:使用Set语句或Select语句

常用的几个全局变量:

| :------ | :------ |
| @@error | 上一条SQL错误号 |
| @@error | 上一条SQL错误号 |
| @@identity | 最后一次插入的标识值 |
| @@rowcount | 受上一个SQL语句影响的行数 |
| @@serviceName | 该计算机上的SQL服务名称 |
| @@Version | SQLServer的版本信息 |

注:不能自己定义全局变量,不能给全局变量赋值

select语句和set语句区别

SetSelect
同时对多个变量赋值不支持支持
表达式返回多个值时出错将返回的最后一个值赋给变量
表达式未返回值时变量将赋值为NULL变量保持原值

注:被赋值的变量的数据来源于数据表的时候,不要用set,选用select

Declare @stuName nvarchar(32)
Select @stuName=studentname from student
Where studentno=23

数据类型转换

cast()与convert()函数

基本语法:

cast(表达式 as 数据类型)

convert(数据类型[(长度)],表达式[,样式])

二者在本质上无任何区别 唯一不同之处是:在将日期时间类型的数据转换为字符串数据时,convert()函数可以通过第三个参数指定转换后字符数据的显示格式不同。

case when ISNUMERIC(f.fielddata)=1 then cast(f.fielddata as money) else 0 END

逻辑控制语句

1:顺序结构控制语句

begin

  语句或语句块

end

类似于C#语言的“{}”表示语句块的开始和结束

2:If-else条件语句

3:while循环语句

注:在SQL 中,只有while一种循环,没有do-while和for循环

4:case多分支语句

case-end语句计算一组条件表达式,并返回其中一个符合条件的结果

基本语法:

case

    when  条件1  then  结果1

    when  条件2  then  结果2

    [ else 其他结果]

end

游标和其他

这是某次写的复杂存储过程

--if语句 判断表变量是否存在
IF(EXISTS(select * from tempdb..sysobjects where id = object_id(N'tempdb..#node1') and type='U'))
BEGIN
--清空表 #:表变量
TRUNCATE TABLE #node1

INSERT INTO #node1 select * from node

select * INTO #node1 from node
END

--游标

declare sale_cursor cursor 
for
    --游标范围
    SELECT m.metaid from metabond mb LEFT JOIN meta m 
    on mb.metaid = m.metaid 
    where bonddict = 272 and MetaState <> 3 and mb.activeid = @customerId 
    order BY m.metaid asc

--打开游标--
open sale_cursor
--开始循环游标变量--
fetch next from sale_cursor into @saleMeta
while @@FETCH_STATUS = 0
BEGIN
    
    --要在循环里执行的sql

    --转到下一个游标,否则会死循环
    fetch next from sale_cursor into @saleMeta
END
--关闭游标
close sale_cursor  
--释放游标
deallocate sale_cursor  

对自增列进行指定id新增或修改id

set identity_insert 表名 ON --允许对自增列Id插入指定数据

--insert or update 语句

set identity_insert 表名 OFF --关闭对自增列Id插入指定数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值