本文是用于记录自己平时遇到的一些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'代表所有类型为表的。