[TOC]
– 数据库版本
select @@version
–查询数据库大小
exec sp_spaceused;
–查询数据库中指定表大小
exec sp_spaceused ‘表名’;
https://www.cnblogs.com/rainman/p/6203065.html
数据库操作:
[TOC]
– 数据库版本
select @@version
–查询数据库大小
exec sp_spaceused;
–查询数据库中指定表大小
exec sp_spaceused ‘表名’;
https://www.cnblogs.com/rainman/p/6203065.html
数据库操作:
[TOC]
– 数据库版本
select @@version
–查询数据库大小
exec sp_spaceused;
–查询数据库中指定表大小
exec sp_spaceused ‘表名’;
https://www.cnblogs.com/rainman/p/6203065.html
数据库操作:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24CREATE DATABASE [WeiyiGeek]
ON
PRIMARY
(
NAME = N'WeiyiGeek',
FILENAME = N'D:\ZSB\WeiyiGeek.ndf',
SIZE = 2304KB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1MB
)
LOG ON
(
NAME = N'WeiyiGeek_log',
FILENAME = N'D:\ZSB\CZWeiyiGeek_log.ldf',
SIZE = 768KB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 10MB
)
GO
ALTER DATABASE [WeiyiGeek] COLLATE Chinese_PRC_CI_AS
GO
ALTER DATABASE [WeiyiGeek] SET RECOVERY FULL
用户操作:
1.新增
1 | --创建登录用户及默认管理数据库 |
2.修改
1 | --禁用登录用户 |
权限操作:
1 | --通过加入数据库角色,赋予数据库用户“db_owner”权限 |
Q:recoke和deny的区别?
收回权限后,可以从其他角色中重新继承权限
)拒绝权限后,不可以从其他角色继承权限
)基础示例:1
2
3
4
5
6
7
8
9-- Revoke
GRANT INSERT ON TableA TO RoleA -- 授予角色RoleA对TableA插入权限
EXEC sp_addrolemember RoleA, 'UserA' -- 用户UserA将有TableA的INSERT权限
REVOKE INSERT ON TableA FROM RoleA -- 用户UserA将没有TableA的INSERT权限(收回权限)
GRANT INSERT ON TableA TO RoleA -- 重新给RoleA以TableA的INSERT权限
-- Deny
DENY INSERT ON TableA TO UserA -- 虽然用户UserA所在RoleA有TableA的INSERT权限,但UserA本身被DENY了,所以用户UserA将没有TableA的INSERT权限。
章节总结:
1.MsSQL用户与角色(MsSQL 2008
):
SYSTEM / MSSQLSERVER / SQLSERVERAGENT / Administrator
), 默认最高权限系统管理员sa;1 |
1 | #sysadmin: 执行SQL Server中的任何动作比如sa,只有这个角色中的成员(或一个被这个角色中的成员赋予了CREATE DATABASE权限的用户)才能够创建数据库; |
1 | #db_owner : 可以执行数据库中技术所有动作的用户 |
注意事项:
固定服务器角色sysadmin中的成员
,并且不能从该角色中删除。EXEC 命令1
2
3
4
5
6
7
8
9
10
11
12
13--检查数据库中孤立用户
EXEC sp_change_users_login @action='Report'
--对孤立用户连接到现有的登录名
EXEC sp_change_users_login
@action='update_one',
@usernamepattern='UserName', --数据库孤立用户
@loginname='LoginName'; --关联到sql server登录名
GO
-- #系统过程添加或删除固定服务器角色成员
sp_addsrvrolemember
sp_dropsrvrolemember
sp_srvrolepermission - 浏览每个固定服务器角色的权限1
2
3
4
5
6
7
8
9
10
11-- 语法
sp_srvrolepermission [[@srvrolename =] 'role']
EXEC sp_srvrolepermission --当前用户角色权限
-- ServerRole Permission
-- bulkadmin Add member to bulkadmin
EXEC sp_srvrolepermission @srvrolename = 'bulkadmin' -- 查看指定固定服务器角色用户的权限
-- ServerRole Permission
-- bulkadmin Add member to bulkadmin
-- bulkadmin BULK INSERT
sp_dbfixedrolepermission - 查看每个固定数据库角色的权限1
2
3
4
5
6
7
8
9
10
11
12-- 语法
sp_db.xedrolepermission [[@rolename =] 'role']
EXEC sp_dbfixedrolepermission -- 当前固定数据库角色权限
-- DbFixedRole Permission
-- db_accessadmin sp_revokedbaccess
-- db_backupoperator BACKUP DATABASE
EXEC sp_dbfixedrolepermission @rolename = 'public' -- 查指定数据库角色的权限
-- DbFixedRole Permission
-- db_owner Add/drop to/from db_accessadmin
-- db_owner Add/drop to/from db_backupoperator
1 | 运 行如下的系统过程:如sp_addlinkedsrvlogin、sp_addlogin、sp_defaultdb、 sp_defaultlanguage、sp_denylogin、sp_droplinkedsrvlogin、sp_droplogin、 sp_grantlogin、sp_helplogins、sp_remoteoption和sp_revokelogin(所有这些系统过程都与系统安 全相关。) |
IN 字句1
2#示例1.显示姓李**的100位学生及其学校
SELECT top 100 XM,KDMC FROM [cj] WHERE BMH IN (SELECT BMH FROM [CJ] WHERE XM LIKE '李__')
行转列
需求分析:当一个数据表中每一行代表了学生的某一科成绩,如何将在一行显示一位考生所有科的成绩,这是我们就需要进行列转行;
实现需求:
测试示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18CREATE TABLE `TEST_TB_GRADE` (
`ID` int(10) NOT NULL AUTO_INCREMENT,
`USER_NAME` varchar(20) DEFAULT NULL,
`COURSE` varchar(20) DEFAULT NULL,
`SCORE` float DEFAULT '0',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
insert into TEST_TB_GRADE(USER_NAME, COURSE, SCORE) values
("张三", "数学", 34),
("张三", "语文", 58),
("张三", "英语", 58),
("李四", "数学", 45),
("李四", "语文", 87),
("李四", "英语", 45),
("王五", "数学", 76),
("王五", "语文", 34),
("王五", "英语", 89);
实际示例:1
2
3
4
5
6
7
8
9
10
11
12
13-- 知识点:group by when-case语句 聚合函数
-- 以姓名为分组进行显示考生各科成绩以及是否考了高等数学或者大学语文
SELECT TOP 10 XM 姓名,
max(case KM1MC WHEN '高等数学' THEN CJ1 else null end) 高等数学,
max(case KM1MC WHEN '大学语文' THEN CJ1 else null end) 大学语文,
max(case KM2MC WHEN '计算机基础' THEN CJ2 else 0.0 end) 计算机基础,
max(case KM2MC WHEN '大学英语' THEN CJ3 else 0.0 end) 大学英语
FROM [cj]
GROUP BY xm;
--结果
姓名 高等数学 大学语文 计算机基础 大学英语
WeiyiGeek 91 0 77 0
列转行
需求分析:将上述图中进行逆向转换,即将一行学生包括的各门成绩进行一行一行显示
测试实例:1
2
3
4select user_name, '语文' COURSE , CN_SCORE as SCORE from test_tb_grade2
union select user_name, '数学' COURSE, MATH_SCORE as SCORE from test_tb_grade2
union select user_name, '英语' COURSE, EN_SCORE as SCORE from test_tb_grade2
order by user_name,COURSE;
实际实例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15-- union 联合查询
-- 以学生姓名排序每一行显示一门课程成绩
SELECT top 1 XM, '高等数学' '科目' ,CJ1 '成绩'from [2019cj]
UNION SELECT top 1 XM, '大学语文' '科目' ,CJ1 '成绩' from [2019cj]
UNION SELECT top 1 XM, '计算机基础' '科目',CJ2 '成绩' from [2019cj]
UNION SELECT top 1 XM, '大学英语' '科目',CJ3 '成绩' from [2019cj]
ORDER BY XM;
--执行结果
-- 姓名 科目 成绩
-- WeiyiGeek 高等数学 91
-- WeiyiGeek 大学语文 0
-- WeiyiGeek 计算机基础 77
-- WeiyiGeek 大学英语 0
声明了三个变量:typeid、parentid、name,数据类型分别为:int、int、varchar(50)
declare @typeid int,@parentid int,@name varchar(50) ;
设置变量:name 的值为:成都市
set @name=’成都市’;
使用变量,变量查询赋值:使用 @name 变量,将查询出来的 typeid 字段的数据赋值给 @typeid 变量
select @typeid = typeid from [logging].[dbo].[SYS_CODE] where name = @name;
使用下面的代码直接输出变量:
print ‘typeid:‘+@typeid+’ name:’+ @name
1 | --创建登录名 |
+
: 该运算符用于字符串拼接,例如select "Name"+":WeiyiGeek"
基础示例:
1 | -- 示例1.Mssql 数据库字符串字段拼接、截取后四位和指定字符串替换 |
Tips : 当我们将两个char、nchar、varchar、nvarchar 、binary、varbinary表达式拼接时,所生成新字符串的长度是两个表达式长度之和。
官方参考地址: https://docs.microsoft.com/en-us/sql/t-sql/functions
描述说明: 在sql server提供了3个常用截取字符串方法它是LEFT()、RIGHT()、SUBSTRING()
基础语法:1
2
3LEFT(character,integer)
RIGHT(character,integer)
SUBSTRING(character,start,length)
参数说明:1
2
3- LEFT : 参数1:要截取的字符串,参数2:截取字符个数
- RIGHT : 参数1:要截取的字符串,参数2:截取字符个数
- SUBSTRING : 参数1:要截取的字符串,参数2:开始截取的下标,参数3:截取的字符长度
基础示例:1
2
3
4
5
6-- 截取字符串左边7个字符--
select LEFT('Welcome to China!',7) as 结果1
-- 截取字符串右边6个字符--
select RIGHT('Welcome to China!',6) as 结果2
-- 截取字符串中间2个字符(从9号下标开始)
select SUBSTRING('Welcome to China!',9,2) as 结果3
描述说明: SQL Server 2017 新增 Translate
函数可以实现批量替换。
简单语法: TRANSLATE ( inputString, characters, translations )
参数说明: 要替换的源字符串,被替换字符,替换成为字符
基础示例:1
2
3
4
5# - A.用普通大括号替换方形大括号和花括号
SELECT TRANSLATE('2*[3+4]/{7-2}', '[]{}', '()()');
# - B.将GeoJSON点转换为WKT
SELECT TRANSLATE('[137.4, 72.3]' , '[,]', '( )') AS Point, TRANSLATE('(137.4 72.3)' , '( )', '[,]') AS Coordinates;
简单语法: Replace(被替换的数据库字段名称或字符串,'被替换字符串','被替换的字符')
参数说明: 要替换的数据库字段名或源字符串,被替换字符,替换成为字符1
SELECT REPLACE(body,'<span>weiyigeek</span>','<span>唯一极客</span>') from blog.content;
1 | select SERVERPROPERTY(N'edition') as Edition --数据版本,如企业版、开发版等 |
执行几个:1
2
3
4
5
6Enterprise Edition (64-bit)
Chinese_PRC_CI_AS
WIN-2605UB613IT
Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
简体中文
936
最大连接数方法sqlserver修改
1 | -- 查询最大连接数 |
你好看友,欢迎关注博主微信公众号哟! ❤
这将是我持续更新文章的动力源泉,谢谢支持!(๑′ᴗ‵๑)
温馨提示: 未解锁的用户不能粘贴复制文章内容哟!
方式1.请访问本博主的B站【WeiyiGeek】首页关注UP主,
将自动随机获取解锁验证码。
Method 2.Please visit 【My Twitter】. There is an article verification code in the homepage.
方式3.扫一扫下方二维码,关注本站官方公众号
回复:验证码
将获取解锁(有效期7天)本站所有技术文章哟!
@WeiyiGeek - 为了能到远方,脚下的每一步都不能少
欢迎各位志同道合的朋友一起学习交流,如文章有误请在下方留下您宝贵的经验知识,个人邮箱地址【master#weiyigeek.top】
或者个人公众号【WeiyiGeek】
联系我。
更多文章来源于【WeiyiGeek Blog - 为了能到远方,脚下的每一步都不能少】, 个人首页地址( https://weiyigeek.top )
专栏书写不易,如果您觉得这个专栏还不错的,请给这篇专栏 【点个赞、投个币、收个藏、关个注、转个发、赞个助】,这将对我的肯定,我将持续整理发布更多优质原创文章!。
最后更新时间:
文章原始路径:_posts/数据存储/MSSQL/MsSQL编程入门.md
转载注明出处,原文地址:https://blog.weiyigeek.top/2019/12-1-42.html
本站文章内容遵循 知识共享 署名 - 非商业性 - 相同方式共享 4.0 国际协议