一、数据库创建与管理
1.1 创建文件包和数据库
exec sp_configure 'show advanced options',1RECONFIGUREexec sp_configure 'xp_cmdshell',1RECONFIGURE
exec xp_cmdshell 'md d:\project'go
use master go
if exists(select name from sysdatabases where name='bbsDB') drop database bbsDBgo
create database bbsDBon( name='bbsDB', filename='d:\project\bbsBD.mdf', size=10mb, filegrowth=15%)log on( name='bbsDB_log', filename='d:\project\bbsBD_log.ldf', size=3mb, maxsize=20mb, filegrowth=15%)
二、数据表设计与约束
2.1 创建用户表
use bbsDBgo
if exists(select name from sysobjects where name='bbsUsers') drop table bbsUsersgo
create table bbsUsers( UID int identity(1,1) not null, Uname varchar(15) not null, Upassword varchar(10) not null, Uemail varchar(20), Usex bit not null, Uclass int , Uremark varchar(20), UregDate datetime not null, Ustate int, Upoint int )
2.2 添加各种约束
if exists(select name from sysobjects where name='PK_UID') alter table bbsUsers drop constraint PK_UIDgoalter table bbsUsersadd constraint PK_UID primary key (UID)go
if exists(select name from sysobjects where name='DF_Upassword') alter table bbsUsers drop constraint DF_Upasswordgoalter table bbsUsersadd constraint DF_Upassword default ('888888') for Upassword go
if exists(select name from sysobjects where name='CK_Upassword') alter table bbsUsers drop constraint CK_Upasswordgoalter table bbsUsersadd constraint CK_Upassword check(Len(Upassword)>=6)GO
if exists(select name from sysobjects where name='DF_UregDate') alter table bbsUsers drop constraint DF_UregDategoalter table bbsUsersadd constraint DF_UregDate default (getdate()) for UregDatego
if exists(select name from sysobjects where name='CK_Uemail') alter table bbsUsers drop constraint CK_Uemailgoalter table bbsUsersadd constraint CK_Uemail check (Uemail like '%@%')go
if exists (select name from sysobjects where name='FK_TsID') alter table bbsTopic drop constraint FK_TsIDgoalter table bbsTopicadd constraint FK_TsID foreign key (TsID) references bbsSection(SID)go
if exists (select name from sysobjects where name='UQ_stuID') alter table bbsTopic drop constraint UQ_stuIDgoalter table bbsTopicadd constraint UQ_stuID unique (stuID)
三、用户权限管理
3.1 创建和授权用户
use masterexec sp_addlogin 'zhouxuan', '密码'go
use 需要分配的数据库goexec sp_grantdbaccess '分配的用户', '你的登录账号(必须有权限)'go
grant 权限 [on 表名] to 数据库用户
四、变量和流程控制
4.1 局部变量
declare @name varchar(8)declare @seat int
set @name = '张三'select @seat = stuseat from stuinfo where stuname='李四'
4.2 常用全局变量
@@error @@identity @@rowcount @@servername @@version
4.3 日期时间函数
dateadd(dd, 3, 需要添加的时间) datediff(dd, 当前时间, 其他时间) datepart(ss, getdate())
4.4 流程控制语句
if(@sumError > 0)begin print '交易失败'endelse begin print '交易成功'end
while(1=1)begin if(@n > 0) update ... else breakend
select 是否通过 = case when writtenExam >= 60 and LabExam >= 60 then '通过' else '未通过'endfrom stuInfo
五、事务处理
5.1 事务示例
use bankDBgobegin tran declare @sumError int set @sumError = 0
update bank set currentMoney = currentMoney + 500 where customerName = '张三' set @sumError = @sumError + @@error
declare @ka char(10) select @ka = cardID from bank where customerName = '张三' insert into transInfo(cardID, transType, transMoney, transDate) values(@ka, '存入', 500, Getdate()) set @sumError = @sumError + @@error
if(@sumError > 0) begin rollback tran print '存钱失败,请确认输入无异常' end else begin commit tran print '存钱成功,请查询余额' endgo
六、索引优化
6.1 创建和使用索引
use stuDBgo
if exists(select name from sysindexes where name='IX_stuMarke_writtenExam') drop index stuMarks.IX_stuMarke_writtenExamgo
create nonclustered index IX_stuMarke_writtenExam on stuMarks(writtenExam)with fillfactor = 30 go
select * from stuMarks with (index(IX_stuMarke_writtenExam)) where writtenExam between 60 and 90
七、视图创建
use studbgo
if exists(select * from sysobjects where name='view_name') drop view view_namego
create view view_nameas <select 语句>go
select * from view_name
八、常用系统存储过程
exec sp_databases exec sp_renamedb 'db1', 'db2' exec sp_helpdb
exec sp_tables exec sp_columns stuInfo exec sp_help stuInfo exec sp_helpconstraint stuInfo exec sp_helpindex stuMarks
exec sp_helptext 'view_name' exec sp_stored_procedures exec sp_password
九、存储过程
9.1 创建存储过程
use stuDBgo
if exists(select * from sysobjects where name='proc_stu') drop procedure proc_stugo
create procedure proc_stu @writtenpass int, @labPass int, @name varchar(50) output as print '-----------------------' go
declare @test varchar(50)exec proc_stu 60, 55, @test output
exec proc_stu @labPass=55, @writtenpass=60, @name=@test output
9.2 错误处理
总结
本文全面介绍了MSSQL从基础到高级的各类操作,包括:
✅ 数据库的创建和管理
✅ 数据表的约束设计
✅ 用户权限体系
✅ 变量与流程控制
✅ 事务处理机制
✅ 索引优化技巧
✅ 视图与存储过程
这些知识是每个SQL开发人员必须掌握的技能,建议结合实际项目多加练习。
阅读原文:原文链接
该文章在 2026/4/15 18:05:30 编辑过