SqlServer 技术点总结(持续更新)

  本文是用于记录自己平时遇到的一些SQL问题或知识点,以便以后自己查阅,会持续的更新,增加内容。发在博客园也可以和各位博友共同学习交流,如文中记录的有错误之处希望指出,谢谢。

一、用SQL语句调用作业

1 USE msdb
2 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'附近有语法错误

 1 USE [ApiDB]
 2 GO
 3 
 4 SET ANSI_NULLS ON
 5 GO
 6 
 7 SET QUOTED_IDENTIFIER ON
 8 GO
 9 
10 CREATE TABLE [dbo].[Test](
11     [ID] [int] IDENTITY(1,1) NOT NULL,
12     [Name] [nvarchar](50) NULL
13  CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED 
14 (
15     [ID] ASC
16 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
17 ) ON [PRIMARY]
18 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'代表所有类型为表的。

 

转载于:https://www.cnblogs.com/yezongjie/p/SQLPoints.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值