1,连接数据库及确认数据库正常运行
#连接数据库
[root@localhost ~]# sqlcmd -S localhost -U SA
Password: #数据密码
#显示系统数据库
1> select name,database_id from sys.databases;
2> go
name database_id
--------- ------------
master 1
tempdb 2
model 3
msdb 4
(4 rows affected)
显示系统用户
1> select name from sysusers;
2> go
name
------------------------------------------------------------------
------------------------------------------------
##MS_AgentSigningCertificate##
##MS_PolicyEventProcessingLogin##
db_accessadmin
db_backupoperator
db_datareader
db_datawriter
db_ddladmin
db_denydatareader
db_denydatawriter
db_owner
db_securityadmin
dbo
guest
INFORMATION_SCHEMA
public
sys
(16 行受影响)
显示当前的用户
1> select current_user;
2> go
------------------------------------
dbo
(1 行受影响)
2,Transact-SQL 基本操作
【1】创建/删除数据库
#创建 "SampleDB" 数据库
1> create database SampleDB;
2> go
#带参数创建数据库
1> create database SampleDB2
2> on primary (
3> name = 'SampleDB2',
4> filename = '/var/opt/mssql/data/SampleDB2.mdf',
5> size = 5GB,
6> maxsize = unlimited,
7> filegrowth = 10MB
8> )
9> log on (
10> name = 'SampleDB2_log',
11> filename = '/var/opt/mssql/data/SampleDB2_log.ldf',
12> size = 1GB,
13> maxsize = 2GB,
14> filegrowth = 5%
15> )
16> go
在sqlserver 2008R2上。
create database SampleDB2
on primary (
name = 'SampleDB2',
filename = 'c:\mssql\databases\SampleDB2.mdf',
size = 5GB,
maxsize = unlimited,
filegrowth = 10MB
)
log on (
name = 'SampleDB2_log',
filename = 'c:\mssql\databases\SampleDB2.ldf',
size = 1GB,
maxsize = 2GB,
filegrowth = 5%
)
go
#显示数据库列表
1> select name,create_date from sys.databases;
2> go
name create_date
-------------------------------------------------------------------------------------------------------------------------------- -----------------------
master 2003-04-08 09:13:36.390
tempdb 2018-07-30 13:41:12.817
model 2003-04-08 09:13:36.390
msdb 2018-06-30 00:03:38.280
SampleDB 2018-07-30 15:04:06.577
SampleDB2 2018-07-30 15:12:11.307
(6 rows affected)
删除数据库
1> drop database SampleDB2;
2> go
【2】创建/删除表
#连接并并指定数据库
[root@localhost ~]# sqlcmd -S localhost -U SA -d SampleDB
#创建"Sample_Table"表
create table dbo.Sample_Table (
Number nvarchar(10) not null,
First_Name nvarchar(50) not null,
Last_Name nvarchar(50) null,
Last_Update date not null
)
go
#显示数据表
1> select name from sysobjects where xtype='u'
2> go
name
--------------------------------------------------------------------------------------------------------------------------------
Sample_Table
(1 rows affected)
#删除数据表
1> drop table dbo.Sample_Table;
2> go
【3】插入/更新/删除数据
#插入一条数据
insert into dbo.Sample_Table (
Number,First_Name,Last_Name,Last_Update
)
values (
'00001','CentOS','Linux','2018-10-05'
)
go
#插入多条数据
insert into dbo.Sample_Table (
Number,First_Name,Last_Name,Last_Update
)
values
('00002','RedHat','Linux','2018-10-05'),
('00003','Ubuntu','Linux','2018-10-05'),
('00004','Debin','Linux','2018-10-05')
go
#显示所有条目
1> select * from dbo.Sample_Table;
2> go
Number First_Name Last_Name
Last_Update
---------- -------------------------------------------------- -------------
-------------------------------- ----------------
00001 CentOS Linux
2017-10-05
00002 RedHat Linux
2018-07-30
00003 Fedora Linux
2018-07-30
00004 Ubuntu Linux
2018-07-30
00005 Debin Linux
2018-07-30
(5 行受影响)
#显示指定列的数据
1> select Number,First_Name from dbo.Sample_Table
2> go
Number First_Name
---------- --------------------------------------------------
00001 CentOS
00002 RedHat
00003 Fedora
00004 Ubuntu
00005 Debin
(5 rows affected)
#显示前3行数据
1> select top 3 * from dbo.Sample_Table
2> go
Number First_Name Last_Name
Last_Update
---------- -------------------------------------------------- -------------
-------------------------------- ----------------
00001 CentOS Linux
2017-10-05
00002 RedHat Linux
2018-07-30
00003 Fedora Linux
2018-07-30
(3 行受影响)
#更新数据
1> update dbo.Sample_Table
2> set Last_Update = '2018-07-30'
3> where First_Name = 'CentOS'
4> go
(1 行受影响)
1> select * from dbo.Sample_Table where First_Name = 'Debian'
2> go
Number First_Name Last_Name
Last_Update
---------- -------------------------------------------------- --------------
-------------------------------- ----------------
00005 Debian Linux
2018-07-30
(1 行受影响)
#删除数据
delete dbo.Sample_Table where First_Name = 'Debian'
go
(1 rows affected)
【4】另一种执行SQL语句的方法
[root@localhost ~]# sqlcmd -S localhost -U SA -d SampleDB -Q 'select name,create_date from sys.databases'
Password:
name create_date
-------------------------------------------------------------------------------------------------------------------------------- -----------------------
master 2003-04-08 09:13:36.390
tempdb 2018-07-30 13:41:12.817
model 2003-04-08 09:13:36.390
msdb 2018-06-30 00:03:38.280
SampleDB 2018-07-30 15:04:06.577
(5 rows affected)
计划任务
【作业常用的几个步骤】
EXEC msdb.dbo.sp_add_job
EXEC msdb.dbo.sp_delete_job
EXEC msdb.dbo.sp_add_jobstep
EXEC msdb.sp_add_jobschedule
EXEC msdb.dbo.sp_add_jobserver
EXEC msdb.dbo.sp_start_job
1、新建作业“Daily SampleDB Backup"
USE msdb ;
GO
exec dbo.sp_add_job
@job_name = N'Daily SampleDB Backup'
go
2、删除作业“NightlyBackups”
USE msdb ;
GO
EXEC sp_delete_job
@job_name = N'NightlyBackups' ;
GO
3、在作业中添加步骤(操作)
USE msdb;
GO
EXEC sp_add_jobstep
@job_name = N'Daily SampleDB Backup',
@step_name = N'Backup SampleDB',
@subsystem = N'TSQL',
@command = N'backup database SampleDB to disk =
N''/var/opt/mssql/data/SampleDB.bak'' with noformat, noinit,
name = ''SampleDB-full'', skip, norewind, nounload, stats = 10',
@retry_attempts = 5,
@retry_interval = 5 ;
GO
4、创建一个可由任意数量的作业使用的计划。
##日调度,每天0点执行一次
exec dbo.sp_add_schedule
@schedule_name = N'Daily Backup for SAMPLE',
@freq_type = 4, #每天
@freq_interval = 1, #指定每多少天发生一次,这里是1天
@active_start_time = 000000; #作业执行的开始时间,格式为HHMMSS
go
##日调度,每天0点开始,每隔2小时执行一次
exec dbo.sp_add_schedule
@schedule_name = N'Daily Backup for SAMPLE',
@freq_type = 4, #每天
@freq_interval = 2, #指定每多少天发生一次,这里是1天
@active_start_time = 000000; #作业执行的开始时间,格式为HHMMSS
go
##日调度,第小时执行一次
EXEC msdb..sp_add_jobschedule
@job_id = @jobid,
@name = N'每小时执行一次',
@freq_type=4, --每天
@freq_interval=1, --指定每多少天发生一次,这里是1天.
@freq_subday_type=0x8, --重复方式,(0x1=指定的时间;0x4=多少分钟;0x8=多少小时)执行一次
@freq_subday_interval=1, --重复周期数,这里每小时执行一次
@active_start_date = NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD
@active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD
@active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS
@active_end_time = 235959 --作业执行的停止时间,格式为HHMMSS
go
--月调度(每X个月的每月几号)
EXEC msdb.dbo.sp_add_jobschedule
@job_id = @jobid,
@name = N'调度名称',
@freq_type = 16, --每月
@freq_recurrence_factor = 2, --每多少月执行一次,这里是每2个月
@freq_interval = 2, --在执行月的第几天执行,这里是第2天
@freq_subday_type = 0x8, --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时执行一次
@freq_subday_interval = 1, --重复周期数,这里每小时执行一次
@active_start_date = NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD
@active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD
@active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS
@active_end_time = 235959 --作业执行的停止时间,格式为HHMMSS
--月调度(每X个月的相对时间)
EXEC msdb.dbo.sp_add_jobschedule
@job_id = @jobid,
@name = N'调度名称',
@freq_type = 32, --每月
@freq_recurrence_factor = 2, --每多少月执行一次,这里是每2个月
@freq_interval = 9, --在当月的那个时间执行,1~7=星期日至星期六,8=日 ,9=工作日,10=周末
@freq_relative_interval = 1, --在第几个相对时间执行,允许的值为1,2,4,8代表第1~4个相对时间,16表示最后一个相对时间
@freq_subday_type = 0x8, --重复方式,0x1=在指定的时间,0x4=多少分钟,0x8=多少小时执行一次
@freq_subday_interval = 1, --重复周期数,这里每小时执行一次
@active_start_date = NULL, --作业执行的开始日期,为NULL时表示当前日期,格式为YYYYMMDD
@active_end_date = 99991231, --作业执行的停止日期,默认为99991231,格式为YYYYMMDD
@active_start_time = 00000, --作业执行的开始时间,格式为HHMMSS
@active_end_time = 235959 --作业执行的停止时间,格式为HHMMSS
--在特定时候执行的作业调度
EXEC msdb.dbo.sp_add_jobschedule
@job_id = @jobid,
@name = N'调度名称',
@freq_type = 64 --64=在SQLServerAgent 服务启动时运行,128=计算机空闲时运行
设置一个作业计划。
exec sp_attach_schedule
@job_name = N'Daily Backup SampleDB',
@schedule_name = N'Daily Backup for SampleDB';
go
5、在指定的服务器中,以指定的作业为目标。
EXEC dbo.sp_add_jobserver
@job_name = N'Daily SampleDB Backup'
GO
8、指示 SQL Server 代理立即执行作业。
USE msdb ;
GO
EXEC dbo.sp_start_job N'Daily SampleDB Backup' ;
GO
显示计划任务
SELECT * FROM sysjobschedules;
GO
schedule_id job_id next_run_date next_run_time
----------- ------------------------------------ ------------- -------------
10 8F05391E-3FC0-435A-929B-B1580734DD99 20180731 120000
(1 rows affected)
显示任务列表
SELECT job_id,name from sysjobs;
GO
job_id name
------------------------------------ --------------------------------------------------------------------------------------------------------------------------------
8F05391E-3FC0-435A-929B-B1580734DD99 Daily SampleDB Backup
(1 rows affected)
参考链接: