SQL server 基本语法
文字摘自https://www.cnblogs.com/chaoa/articles/3894311.html
一、定义变量 --简单赋值 
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
存储过程一般用在实现复杂的功能,数据操纵方面。
SQL server 基本语法的更多相关文章
- SQL server存储过程语法及实例(转)
		存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法-------------------- 一.创建存储过程cr ... 
- Sql Server 基础语法
		来自:http://www.cnblogs.com/AaronYang/archive/2012/04/24/2468093.html Sql Server 基础语法 -- 查看数据表 select ... 
- SQL SERVER常用语法记录
		用于记录SQL SERVER常用语法,以及内置函数. 以下语句包含: WITH 临时表语法 ROW_NUMBER()内置函数,我一般主要是用来分页.针对于查出来的所有数据做一个数字排序 分页的BETW ... 
- SQL SERVER With语法[转]
		今天在论坛上看到一个举例,关于sql server 的示例.1/25/50/100美分,多少种可能拼凑成2美元. 看了其中第一条语法,放在SQL SERVER中测试,发现真的列举出所有组合成2美元的方 ... 
- SQL Server 事务语法
		事务全部是关于原子性的.原子性的概念是指可以把一些事情当做一个单元来看待.从数据库的角度看,它是指应全部执行或全部都不执行的一条或多条语句的最小组合. 为了理解事务的概念,需要能够定义非常明确的边界. ... 
- 数往知来 SQL SERVER 基本语法<七>
		sqlserver学习_01 启动数据库 开始->cmd->进入控制台 sqlcmd->-S .\sqlexpress 1> 如果出现表示数据库"sqle ... 
- SQL Server索引语法 <第四篇>
		从CREATE开始 通过显式的CREATE INDEX命令 在创建约束时作为隐含的对象 随约束创建的隐含索引 当向表中添加如下两种约束之一时,就会创建隐含索引. 主键约束(聚集索引) 唯一约束(唯一索 ... 
- SQL SERVER常用语法汇总
		阅读目录 一.SQL分类 二.基础语句 三.sql技巧 四.(MS SQL Server)SQL语句导入导出大全 回到目录 一.SQL分类 DDL—数据定义语言(CREATE,ALTER,DROP,D ... 
- SQL server基本语法
		此处源于一个基本的SQL Server试题,基本上涵盖了SQL Server的全部基本语法,粘贴在此处,权当分享 --1. 创建TestDB数据库 create database TestDB; ... 
- [SQL] SQL SERVER基础语法
		Struct Query Language 1.3NF a.原子性 b.不能数据冗余 c.引用其他表的主键 2.约束 a.非空约束 b.主键约束 c.唯一约束 d.默认约束 e.检查约束 f.外键约束 ... 
随机推荐
- mac“打不开身份不明的开发者”
			在mac安装软件发现这样的提示 解决方法: 打开系统偏好设置-->安全与隐私-->通用-->选择任何来源 不能选择的话点击按钮锁即可编辑 没有“任何来源”选项(比如我的mac) 打开 ... 
- 【Selenium-WebDriver自学】Selenium-IDE验证点(五)
			==================================================================================================== ... 
- iOS关于md5 32位加密
			导入头文件: #import <CommonCrypto/CommonDigest.h> //md5 32位 加密 (小写)- (NSString *)md5:(NSString *)st ... 
- github构建个人网站模板
			http://novoland.github.io/%E5%B9%B6%E5%8F%91/2014/09/11/ThreadLocal%20%E5%88%86%E6%9E%90.html 
- service和pod通过标签绑定
			service和pod绑定 apiVersion: v1 kind: Service metadata: name: my-haproxy labels: app: my-haproxy spec: ... 
- tkinter widget
			tkinter messagebox 
- 12.利用kakatips对网站数据信息监控
			网站信息监控 kakatips软件 百度云链接:https://pan.baidu.com/s/1lNH8OGODbIvYeFTjz6kVEQ 密码:5qtz 这是我编辑好的具体详情如下: 有效标记需 ... 
- Loadrunner:win10下Vuser 运行脚本通过,Controller执行用户并发报错
			现象:win7安装LR可以正常使用,将win7升级到win10之后,运行场景之后报错:Error (-81024): LR_VUG: The 'QTWeb' type is not supported ... 
- 插件:★★★     !!!图片懒加载    lazyload.js  、    jquery.scrollLoading.js
			插件:图片懒加载 jquery.lazyload.js 2016-3-31 插件说明:http://www.w3cways.com/1765.html (小插件,好用) 下载地址: https://r ... 
- Node.js之process模块
			注意⚠️:process为nodejs内置对象,不需要实例化,改模块用来与当前进程进行互动,可以通过全局变量process访问,它是一个EventEmitter对象的实例. process对象提供一系 ... 
