创建数据库

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
USE master
--检查tangfDB是否存在
IF (EXISTS(SELECT * FROM sysdatabases WHERE name ='tangfDB')) 
-- # 如果已经存在tangfDB数据库,则删除tangfDB
  DROP DATABASE tangfDB                 
GO
-- # 数据库名为tangfDB
CREATE DATABASE tangfDB                                     
ON PRIMARY            
(
-- 主数据文件逻辑名称
 NAME = tangfDB,                         
-- 数据文件路径及物理名称(/opt/data/路径需存在)
 FILENAME = '/opt/data/tangfDB.mdf',   
-- 初始大小
 SIZE = 5MB,                                                       
-- 最大尺寸
 MAXSIZE = UNLIMITED,                                       
-- 自动增长的增量
 FILEGROWTH = 1MB                                         
)
LOG ON
( 
-- 日志文件逻辑名称
NAME = schoolDB_log,                       
-- 日志文件路径及物理名称(/opt/data/路径需存在)
FILENAME = '/opt/data/tangfDB_log.ldf', 
-- 初始大小
SIZE = 2MB,                                                        
-- 最大尺寸
MAXSIZE = 4MB,                                               
-- 自动增长的增量
FILEGROWTH = 10%                                           
)

创建用户

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
-- 声明数据库引用
use testss;
go
-- 创建用户登录
create login login_name
with
password={ 'password' | hashed_password hashed }
[must_change][,]
[sid=0x14585E90117152449347750164BA00A7][,]
[default_database=database_name][,]
[default_language=language][,]
[check_expiration={ on | off }][,]
[check_policy={ on | off }][,]
[credential=credential_name]

--login_name
--指定创建的登录名。有四种类型的登录:SQLServer登录、Windows登录、证书映射登录和非对称密钥映射登录。
--在创建从Windows域帐户映射的登录名时,必须以[<login_name>]格式使用Windows 2000之前的用户登录名。
--不能使用login_name@DomainName格式的UPN。
--有关示例,请参阅本文后面的示例D。身份验证登录的类型为sysname,它必须符合标识符规则,且不能包含“\”。
--Windows登录名可以包含“\”。Active Directory用户的登录名需少于21个字符。
--password='password*'
--仅适用于SQL Server登录。指定正在创建的登录名的密码。应使用强密码。
--有关详细信息,请参阅强密码和密码策略。从SQL Server 2012 (11.x)开始,存储的密码信息使用 SHA-512 加盐密码进行计算。
--密码是区分大小写的。密码应始终至少包含 8 个字符,并且不能超过128个字符。
--密码可以包含 a-z、A-Z、0-9 和大多数非字母数字字符。 密码不能包含单引号或 login_name。
--password=hashed_password
--仅适用于hashed关键字。指定要创建的登录名的密码的哈希值。
--hashed仅适用于SQL Server登录。指定在password参数后输入的密码已经过哈希运算。
--如果未选择此选项,则在将作为密码输入的字符串存储到数据库中之前,对其进行哈希运算。
--此选项应仅用于在服务器之间迁移数据库。切勿使用hashed选项创建新的登录名。hashed选项不能用于SQL 7或更早版本创建的哈希。
--must_change
--仅适用于SQL Server登录。如果包括此选项,则SQL Server将在首次使用新登录时提示用户输入新密码。
--sid=sid
--用于重新创建登录名。仅适用于SQL Server身份验证登录,不适用于Windows身份验证登录。指定新SQL Server身份验证登录的sid。
--如果未使用此选项,SQL Server将自动分配sid。sid结构取决于SQL Server版本。 QL Server登录sid:基于GUID的16 字节(binary(16))文本值。 例如,sid 0x14585E90117152449347750164BA00A7。
--default_database=database
--指定将指派给登录名的默认数据库。如果未包括此选项,则默认数据库将设置为master。
--default_language=language
--指定将指派给登录名的默认语言。如果未包括此选项,则默认语言将设置为服务器的当前默认语言。即使将来服务器的默认语言发生更改,登录名的默认语言也仍保持不变。
--check_expiration={ on | off }
--仅适用于SQL Server登录。 指定是否应对此登录帐户强制实施密码过期策略。 默认值为off。
--check_policy={ on | off }
--仅适用于SQL Server登录。 指定应对此登录强制实施运行SQL Server 计算机的 Windows 密码策略。 默认值为on。
--如果 Windows 策略要求强密码,密码必须至少包含以下四个特点中的三个:
--大写字符 (A-Z)。
--小写字符 (a-z)。
--数字 (0-9)。
--一个非字母数字字符,如空格、、@、*、^、%、!、$、# 或 &。
--credential=credential_name
--将映射到新SQL Server登录的凭据名称。
该凭据必须已存在于服务器中。当前此选项只将凭据链接到登录名。凭据不能映射到系统管理员(sa)登录名

-- 示例
--创建登录用户
create login testuser
with
password='123456',
--must_change,
--sid=0x14585E90117152449347750164BA00A7,
default_database=master,
--default_language=language,
check_expiration=off,
check_policy=off
--credential=[sysadmin]

授权用户

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
--声明数据库引用
use testss;
go
--可以添加多个服务器角色
--创建服务器角色, 服务器角色用于向用户授权服务器范围内的安全特权
--alter server role [bulkadmin] add member testuser;
--go
--alter server role [dbcreator] add member testuser;
--go
--alter server role [diskadmin] add member testuser;
--go
--alter server role [processadmin] add member testuser;
--go
--alter server role [securityadmin] add member testuser;
--go
--alter server role [serveradmin] add member testuser;
--go
--alter server role [setupadmin] add member testuser;
--go
alter server role [sysadmin] add member testuser;
go
--创建用户映射,映射到此登录名的用户
use [model]
go
create user testuser for login testuser;
go
--use [msdb]
--go
--create user testuser for login testuser;
--go
--use [ReportServer]
--go
--create user testuser for login testuser;
--go
--use [ReportServerTempDB]
--go
--create user testuser for login testuser;
--go
--use [tempdb]
--go
--create user testuser for login testuser;
--go
use [testss]
go
create user testuser for login testuser;
go
----创建用户登录数据库
--use [master]
--go
--create user [testuser] for login [testuser];
--go
----创建用户登录多个数据库
--use [testss]
--go
--create user [testuser] for login [testuser];
--go
----声明数据库应用
--use [testss]
--go
----授予不安全的程序集
--grant unsafe assembly to testuser;
--go
----授予查看服务器状态
--grant view server state to testuser;
--go
----授予查看任意定义
--grant view any definttion to testuser;
--go
----授予查看任意数据库
--grant view any database to testuser;
--go
----授予创建DDL事件通知
--grant create ddl event notification to testuser;
--go
----授予创建端点
--grant create endpoint to testuser;
--go
----授予创建服务器角色
--grant create server role to testuser;
--go
----授予创建跟踪事件通知
--grant create trace event notification to testuser;
--go
----授予创建可用性组
--grant create availability group to testuser;
--go
----授予创建任意数据库
--grant create any database to testuser;
--go
----授予更改服务器状态
--grant alter server state to testuser;
--go
----授予更改跟踪
--grant alter trace to testuser;
--go
----授予更改任何服务器角色
--grant alter any server role to testuser;
--go
----授予更改任何可用性组
--grant alter any availability group to testuser;
--go
----授予更改任意登录名
--grant alter any login to testuser;
--go
----授予更改任意端点
--grant alter any endpoint to testuser;
--go
----授予更改任意服务器审核
--grant alter any server audit to testuser;
--go
----授予更改任意权限
--grant alter any connection to testuser;
--go
----授予更改任意连接服务器
--grant alter any linked server to testuser;
--go
----授予更改任意凭据
--grant alter any credential to testuser;
--go
----授予更改任意事件会话
--grant alter any event session to testuser;
--go
----授予更改任意事件通知
--grant alter any event notification to testuser;
--go
----授予更改任意数据库
--grant alter any database to testuser;
--go
----授予更改设置
--grant alter settings to testuser;
--go
----授予更改资源
--grant alter resources to testuser;
--go
----授予关闭
--grant shutdown to testuser;
--go
----授予管理大容量操作
--grant administer bulk operations to testuser;
--go
----授予控制服务器
--grant control server to testuser;
--go
----授予连接SQL
--grant connect sql to testuser;
--go
----授予外部访问程序集
--grant external access assembly to testuser;
--go
----授予验证服务器
--grant authenticate server to testuser;
--go
--设置是否允许连接到数据库引擎
--deny connect sql to testuser;
--go
--是否允许登录
--alter login testuser disable;
--go
----用户状态
----声明默认数据库引用
--use [testuser]
--go
----是否允许用户连接到数据库引擎
--deny connect sql to [testuser];
--go
----是否允许登录
--alter login [testuser] disable
--go

---- 授权表给用
GRANT  SELECT  ON XXXX TO XXXXXX;

日期函数

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Style ID	            SQL	                     对应格式
1	SELECT CONVERT(varchar(100), GETDATE(), 1);	01/03/17
2	SELECT CONVERT(varchar(100), GETDATE(), 2);	17.01.03
3	SELECT CONVERT(varchar(100), GETDATE(), 3);	03/01/17
4	SELECT CONVERT(varchar(100), GETDATE(), 4);	03.01.17
5	SELECT CONVERT(varchar(100), GETDATE(), 5);	03-01-17
6	SELECT CONVERT(varchar(100), GETDATE(), 6);	03 01 17
7	SELECT CONVERT(varchar(100), GETDATE(), 7);	01 03, 17
8	SELECT CONVERT(varchar(100), GETDATE(), 8);	09:09:10
9	SELECT CONVERT(varchar(100), GETDATE(), 9);	01 3 2017 9:09:10:037AM
10	SELECT CONVERT(varchar(100), GETDATE(), 10);	01-03-17
11	SELECT CONVERT(varchar(100), GETDATE(), 11);	17/01/03
12	SELECT CONVERT(varchar(100), GETDATE(), 12);	170103
13	SELECT CONVERT(varchar(100), GETDATE(), 13);	03 01 2017 09:09:10:037
14	SELECT CONVERT(varchar(100), GETDATE(), 14);	09:09:10:037
20	SELECT CONVERT(varchar(100), GETDATE(), 20);	2017-01-03 09:09:10
21	SELECT CONVERT(varchar(100), GETDATE(), 21);	2017-01-03 09:09:10.037
22	SELECT CONVERT(varchar(100), GETDATE(), 22);	01/03/17 9:09:10 AM
23	SELECT CONVERT(varchar(100), GETDATE(), 23);	2017-01-03
24	SELECT CONVERT(varchar(100), GETDATE(), 24);	09:09:10
25	SELECT CONVERT(varchar(100), GETDATE(), 25);	2017-01-03 09:09:10.037
100	SELECT CONVERT(varchar(100), GETDATE(), 100);	01 3 2017 9:09AM
101	SELECT CONVERT(varchar(100), GETDATE(), 101);	01/03/2017
102	SELECT CONVERT(varchar(100), GETDATE(), 102);	2017.01.03
103	SELECT CONVERT(varchar(100), GETDATE(), 103);	03/01/2017
104	SELECT CONVERT(varchar(100), GETDATE(), 104);	03.01.2017
105	SELECT CONVERT(varchar(100), GETDATE(), 105);	03-01-2017
106	SELECT CONVERT(varchar(100), GETDATE(), 106);	03 01 2017
107	SELECT CONVERT(varchar(100), GETDATE(), 107);	01 03, 2017
108	SELECT CONVERT(varchar(100), GETDATE(), 108);	09:09:10
109	SELECT CONVERT(varchar(100), GETDATE(), 109);	01 3 2017 9:09:10:037AM
110	SELECT CONVERT(varchar(100), GETDATE(), 110);	01-03-2017
111	SELECT CONVERT(varchar(100), GETDATE(), 111);	2017/01/03
112	SELECT CONVERT(varchar(100), GETDATE(), 112);	20170103
113	SELECT CONVERT(varchar(100), GETDATE(), 113);	03 01 2017 09:09:10:037
114	SELECT CONVERT(varchar(100), GETDATE(), 114);	09:09:10:037
120	SELECT CONVERT(varchar(100), GETDATE(), 120);	2017-01-03 09:09:10
121	SELECT CONVERT(varchar(100), GETDATE(), 121);	2017-01-03 09:09:10.037
126	SELECT CONVERT(varchar(100), GETDATE(), 126);	2017-01-03T09:09:10.037
130	SELECT CONVERT(varchar(100), GETDATE(), 130);	5 ???? ?????? 1438 9:09:10:037AM
131	SELECT CONVERT(varchar(100), GETDATE(), 131);	5/04/1438 9:09:10:037AM

数据库还原

1
2
3
4
5
6
7
8
USE [master]
GO
RESTORE DATABASE nn
FROM DISK = '/var/opt/mssql/data/nn.bak'
WITH REPLACE,
 MOVE 'nn' TO '/var/opt/mssql/data/nn.mdf',
 MOVE 'nn_log' TO '/var/opt/mssql/data/nn_log.ldf'
GO

FAQ

搜索中文没结果

1
2
-- 使用N
where XXXXXXX = N'中文'

如果需要执行百兆以上的sql脚本

1
2
# 推荐使用sqlcmd的命令工具执行
./sqlcmd -S localhost -U sa -P Password_123 -d tangfDB -i ALL.sql