SqlServer 技术点总结(持续更新)
本文是用于记录自己平时遇到的一些SQL问题或知识点,以便以后自己查阅,会持续的更新,增加内容。发在博客园也可以和各位博友共同学习交流,如文中记录的有错误之处希望指出,谢谢。
一、用SQL语句调用作业
USE msdb
EXEC sp_start_job @job_name = '作业名称'
二、SQL语句中GO语句
1.GO的解释
官方文档:GO只是SQL Server管理器(SSMS)中用来提交T-SQL语句的一个标志。
解释:GO向SqlServer实用工具发出一批Transact-SQL语句结束的信号。
每一个被GO分隔的语句都是一个单独的事务,一批GO隔开的语句执行失败,不会影响其他GO隔开的语句执行。也就是说其中的一个GO失败的,不会影响其他的GO成功。
但是多个GO之间是有顺序的,前面一个执行完毕,才会执行后面的。
update xxxx
set num = 1
GO update student
set studentNo = 222
where studentName = '张三'
GO
如上的示例:假如数据库中没有'xxxx'表,有'student'表,就是说第一个语句是错误的,第二个语句是正确的。它的执行顺序是'update xxxx'执行完毕再去执行'update student',因为GO是有顺序的;但是由于他们都是单独的事务,所以第一个失败了,但是第二个会成功。
2.C#中执行的SQL语句带'GO',会报'GO'附近有语法错误
USE [ApiDB]
GO SET ANSI_NULLS ON
GO SET QUOTED_IDENTIFIER ON
GO CREATE TABLE [dbo].[Test](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NULL
CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
如上的建表语句,在SQL Server Management Studio管理工具中是可以执行的,然后本来想放在C#程序中直接执行,但是抛出:'GO'附近有语法错误,然后去查阅资料。
SQL Server Management Studio管理工具属于客户端,它可以识别GO用来分批提交,但是'GO'不是SQL语句。它是可为osql,isql使用工具及SQL Server查询分析器识别的命令,SQL服务器不能识别所以不能用在程序中。
如果确实要在程序中使用这些语句,只能在程序中启用一个事务,多条语句分别执行(去掉GO),所有语句执行完毕再提交事务。
三、SQL中的BEGIN和END语句
BEGIN和END语句用于将多个Transact-SQL语句组合为一个逻辑块。
BEGIN单独一行,标志着语句块的开始,后面跟语句块,也就是多条T-SQL语句,然后END单独一行,标志着语句块结束。
注:BEGIN和END必须一起使用
BEGIN
{ sql_statement | statement_block }
END
上面为语法。其实BEGIN和END相当于C#中的'{'和'}'。
四、查询数据库中有没有某表,没有就创建
if not exists(select * from sysobjects s where s.xtype = 'U' and s.name = '表名')
begin
CREATE TABLE 表名
end
其中sysobjects存储的是数据库中表相关的信息,xtype = 'U'代表所有类型为表的。
五、SqlServer 新建自定义函数:使用指定字符分隔字符串(例:按照","将字符串分隔开)
CREATE FUNCTION [dbo].[Fun_SplitStr]
(
@originalStr VARCHAR(8000), --要分割的字符串
@split varchar(100) --分隔符号
)
RETURNS @temp TABLE(Result VARCHAR(100))
AS
BEGIN
DECLARE @result AS VARCHAR(100); --定义变量用于接收单个结果 SET @originalStr = @originalStr + @split ; WHILE (@originalStr <> '')
BEGIN
SET @result = LEFT(@originalStr, CHARINDEX(@split, @originalStr, 1) -1) ; INSERT @temp VALUES(@result) ; --STUFF()函数用于删除指定长度的字符,并可以在指定的起点处插入另一组字符。
SET @originalStr = STUFF(@originalStr, 1, CHARINDEX(@split, @originalStr, 1), '');
END
RETURN
END
调用函数:
select * from dbo.Fun_SplitStr('978,7,5007,7234,7',',')
表值函数与表关联查询示例:
SELECT
o.*,
sp.result productname
FROM dbo.[order] o
cross apply dbo.Fun_SplitStr(o.detailname,',') as sp
WHERE o.DataValid = 20--数据校验成功
六、Sqlserver按照a字段分组后合并b字段的值
create table #temp(
membercode nvarchar(100) null,
orderdate datetime null,
gifts nvarchar(100) null
) insert into #temp values('ye', '2019-8-1', '筷子')
insert into #temp values('ye', '2019-7-1', '戒指')
insert into #temp values('ye', '2018-2-1', '手镯') select * from #temp select
t.membercode,
year(t.orderdate) years,
cast(year(t.orderdate) as nvarchar(4)) + ':' + stuff((select ',' + gifts from #temp te
where te.membercode = t.membercode
and year(te.orderdate) = year(t.orderdate)
for XML PATH('')),1,1,'') + ';' year_gifts
from #temp t
where t.gifts is not null and t.gifts != ''
group by t.membercode,year(t.orderdate)
order by year(t.orderdate)
七、sqlserver生成随机数
注:在单个批处理中多次调用时,rand()返回相同的数字。
批量生成随机数时使用:
SELECT ABS(CHECKSUM(NewId())) % 99
代表在1到99之间生成一个随机数。
SqlServer 技术点总结(持续更新)的更多相关文章
- 中国.NET:各地微软技术俱乐部汇总(持续更新中...)
中国.NET:各地微软技术俱乐部汇总(持续更新中...) 本文是转载文,源地址: https://www.cnblogs.com/panchun/p/JLBList.html by 史记微软. ...
- CNUTCon2017全球运维技术大会(持续更新中) - 斯达克学院 - 实战驱动的 IT 教育平台 - Powered By EduSoho
CNUTCon2017全球运维技术大会(持续更新中) - 斯达克学院 - 实战驱动的 IT 教育平台 - Powered By EduSoho https://new.stuq.org/cours ...
- 收藏的iOS技术站点汇总(持续更新ing)
大牛博客 objc.io PS:经典,内容深而广 objc中国 NSHipster PS:非常多小细节 NSHipster 中文版 唐巧的技术博客 PS:LZ是唐巧的脑残粉- OneV's Den 王 ...
- 搜集好的java技术帖子,持续更新,java程序员的要求
1.Java NIO 系列教程 2.Java实现 二叉搜索树算法(BST) 3. Java 并发工具包 java.util.concurrent 用户指南 4.架构师之路系列:http://blog. ...
- 《WCF技术剖析》博文系列汇总[持续更新中]
原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...
- (持续更新) C# 面试技术点、常见SQL技术点 和 解决高并发的相关技术
这篇博客 持续更新. 方便小伙伴们学习与面试前的复习
- ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借
ASP.NET MVC深入浅出系列(持续更新) 一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...
- 我的敏捷、需求分析、UML、软件设计电子书 - 下载(持续更新中)
我将所有我的电子书汇总在一起,方便大家下载!(持续更新) 文档保存在我的网站——软件知识原创基地上(www.umlonline.org),请放心下载. 1)软件设计是怎样炼成的?(2014-4-1 发 ...
- java视频教程 Java自学视频整理(持续更新中...)
视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...
随机推荐
- Ubuntu 16——安装——ns2.35和nam
Ubuntu 16.04 安装ns2.35+nam 总结出以下安装步骤 1: 更新源 sudo apt-get update #更新源列表 sudo apt-get upgrade #更新已经安装的包 ...
- 初学mybatis和mysql碰到的问题
今天学习了下使用mybatis操作数据库,期间也是各种问题出现,幸好现在网络发达,网络上很多都可以解决,现在总结一下: Exception in thread "main" org ...
- 《HTTP权威指南》1-HTTP概要
Http HyperText Transfer Protocol,超文本协议通过此协议,我们可以将遍布全世界的Web服务器上的信息块快速,便捷,可靠的搬移到我们自己桌面上的Web浏览器上.这些信息块指 ...
- Spark Programming--- Shuffle operations
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- Docker应用:Hello World
前言: 最近学习了Docker相关技术点,国内关于Docker的资料大多是基于Linux系统的,但是我对Linux又不熟(实际上没用过,掩面哭笑.Jpg). 好在在Win10下也是支持Docker的, ...
- Kali学习笔记14:SMB扫描、SMTP扫描
SMB(Server Message Block)协议,服务消息块协议. 最开始是用于微软的一种消息传输协议,因为颇受欢迎,现在已经成为跨平台的一种消息传输协议. 同时也是微软历史上出现安全问题最多的 ...
- dubbo实用知识点总结(三)
1. 服务降级 2. 优雅停机 3. 主机绑定 4. 访问日志 5. Multicast注册中心 6. zookeeper注册中心 7. 推荐用法 8. 容量规划 9. 基准测试工具包
- CentOS随笔——关机命令
关机重启命令 在linux领域内大多用在服务器上,很少遇到关机的操作.毕竟服务器上跑一个服务是永无止境的,除非特殊情况面,不得已才会关机. 正确的关机流程为:sync>shutdown>r ...
- Spring Boot 的 10 个核心模块
学习 Spring Boot 必须得了解它的核心模块,和 Spring 框架一样,Spring Boot 也是一个庞大的项目,也是由许多核心子模块组成的. 你所需具备的基础 告诉你,Spring Bo ...
- Swift中的元组tuple的用法
用途 tuple用于传递复合类型的数据,介于基础类型和类之间,复杂的数据通过类(或结构)存储,稍简单的通过元组. 元组是使用非常便利的利器,有必要整理一篇博文. 定义 使用括号(), 括号内以逗号分割 ...