本文是用于记录自己平时遇到的一些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 技术点总结(持续更新)的更多相关文章

  1. 中国.NET:各地微软技术俱乐部汇总(持续更新中...)

    中国.NET:各地微软技术俱乐部汇总(持续更新中...)   本文是转载文,源地址: https://www.cnblogs.com/panchun/p/JLBList.html by ​史记微软. ...

  2. CNUTCon2017全球运维技术大会(持续更新中) - 斯达克学院 - 实战驱动的 IT 教育平台 - Powered By EduSoho

    CNUTCon2017全球运维技术大会(持续更新中) - 斯达克学院 - 实战驱动的 IT 教育平台 - Powered By EduSoho   https://new.stuq.org/cours ...

  3. 收藏的iOS技术站点汇总(持续更新ing)

    大牛博客 objc.io PS:经典,内容深而广 objc中国 NSHipster PS:非常多小细节 NSHipster 中文版 唐巧的技术博客 PS:LZ是唐巧的脑残粉- OneV's Den 王 ...

  4. 搜集好的java技术帖子,持续更新,java程序员的要求

    1.Java NIO 系列教程 2.Java实现 二叉搜索树算法(BST) 3. Java 并发工具包 java.util.concurrent 用户指南 4.架构师之路系列:http://blog. ...

  5. 《WCF技术剖析》博文系列汇总[持续更新中]

    原文:<WCF技术剖析>博文系列汇总[持续更新中] 近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析(卷1)>的写作,一直无暇管理自己的Blog.在<WCF技术剖 ...

  6. (持续更新) C# 面试技术点、常见SQL技术点 和 解决高并发的相关技术

    这篇博客 持续更新. 方便小伙伴们学习与面试前的复习

  7. 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的无状态模 ...

  8. 我的敏捷、需求分析、UML、软件设计电子书 - 下载(持续更新中)

    我将所有我的电子书汇总在一起,方便大家下载!(持续更新) 文档保存在我的网站——软件知识原创基地上(www.umlonline.org),请放心下载. 1)软件设计是怎样炼成的?(2014-4-1 发 ...

  9. java视频教程 Java自学视频整理(持续更新中...)

    视频教程,马士兵java视频教程,java视频 1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播 ...

随机推荐

  1. Spring Boot中Web应用的统一异常处理 转载来自翟永超

    我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况.Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来 ...

  2. K-DTree学习

    应用于K维数据的快速查找,比如横坐标,纵坐标,价格……,本模板以16青岛区域赛K题为例 —— 三维K - D Tree 模板 我们应该都见过平衡树吧,那就是1-D树,变成k维之后,我们连续分割1 - ...

  3. 【Solidity】学习(4)

    solidity函数修饰符 view  没有改变任何值或者写任何东西.只能读取,不能修改 function sayHello() public view returns (string) { } pu ...

  4. 在CentOS 7上安装和使用GlusterFS

    GlusterFS aggregates various storage servers over Ethernet or Infiniband RDMA interconnect into one ...

  5. The test form is only available for requests from the local machine

    使用浏览器测试Web服务时出现提示“The test form is only available for requests from the local machine.”的解决办法 在Web服务项 ...

  6. [转] KVM虚拟化技术生态环境介绍

    KVM虚拟化技术生态环境介绍 http://xanpeng.github.io/wiki/virt/kvm-virtulization-echosystem-intro.html kvm和qemu/q ...

  7. [转]深入理解 GRE tunnel

    我以前写过一篇介绍 tunnel 的文章,只是做了大体的介绍.里面多数 tunnel 是很容易理解的,因为它们多是一对一的,换句话说,是直接从一端到另一端.比如 IPv6 over IPv4 的 tu ...

  8. Javascript高级编程学习笔记(64)—— 事件(8)键盘与文本事件

    键盘与文本事件 用户在使用键盘时会触发键盘事件 “DOM2级事件”最初规定了键盘事件,但是最后在定稿时又删除了相应内容 所以键盘事件被放入了DOM3级事件的规范中 总的来说有三个键盘事件: keydo ...

  9. Python面向对象2:类与对象的成员分析及self

    # 3. 类和对象的成员分析- 类和对象都可以存储成员,成员可以归类所有,也可以归对象所有- 类存储成员时使用的是与类关联的一个对象- 独享存储成员是是存储在当前对象中- 对象访问一个成员时,如果对象 ...

  10. Go语言数组

    目录 声明数组 数组在内存的结构 初始化数组 使用数组 函数间传递数组 数组使用注意事项 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列(这是一种同构的数据结构);这种类型可以是任意的原始类 ...