1. 常见针对表的操作(增删改查)

--1. Create Table
USE [MVC_000]
CREATE TABLE T_TableName
(
ID INT IDENTITY(1,1) PRIMARY KEY,
Name VARCHAR(50) UNIQUE,
Age INT,
HomeAddress VARCHAR(50)
) --2. Insert data into table:T_TableName
INSERT INTO T_TableName(Name,Age,HomeAddress)
VALUES('Xiao Lin',29,'SD.Road New York') --3. Truncate table
IF OBJECT_ID(N'T_TableName',N'U') IS NOT NULL
BEGIN
TRUNCATE TABLE T_TableName
END --4. Delete record
IF EXISTS(SELECT * FROM T_TableName WHERE ID=1)
BEGIN
DELETE T_TableName WHERE ID=1
END --5. Drop table
IF OBJECT_ID(N'T_TableName',N'U') IS NOT NULL
BEGIN
DROP TABLE T_TableName
END

2. 临时表,表变量及CTE(公用表表达式)的操作

临时表存在于tempdb中,全局临时表以”##“开头。临时表需要手动清除,而CTE和表变量使用完成后会自动清除。

--1. Temporary table
--A. Check and delete if current temporary table is exists
IF OBJECT_ID('TEMPDB..#TempTable') IS NOT NULL
BEGIN
DROP TABLE #TempTable
END
CREATE TABLE #TempTable
(
ID BIGINT,
FIRST_NAME VARCHAR(50),
LAST_NAME VARCHAR(50),
PASSPORT VARCHAR(50),
GENDER VARCHAR(50),
BIRTH_DATE DATE,
STATUS CHAR(1)
)
--Insert data
INSERT INTO TABLE #TempTable
SELECT ID,FIRST_NAME,LAST_NAME,PASSPORT,GENDER,BIRTH_DATE,STATUS FROM TableName
--Search
SELECT * FROM #TempTable --B. Or you can use it without definition
--Insert data
INSERT INTO TABLE #TempTable
SELECT ID,FIRST_NAME,LAST_NAME,PASSPORT,GENDER,BIRTH_DATE,STATUS FROM TableName
--Search
SELECT * FROM #TempTable --2. Define table variables
--For definine
DECLARE @TempTable TABLE
(
ID BIGINT,
FIRST_NAME VARCHAR(50),
LAST_NAME VARCHAR(50),
PASSPORT VARCHAR(50),
GENDER VARCHAR(50),
BIRTH_DATE DATE,
STATUS CHAR(1)
)
--Insert data
INSERT INTO TABLE @TempTable
SELECT ID,FIRST_NAME,LAST_NAME,PASSPORT,GENDER,BIRTH_DATE,STATUS FROM TableName
--Search
SELECT * FROM @TempTable --3. CTE(Common Table Expression)
;WITH TestTable AS
(
SELECT * FROM [dbo].[TbEmployee] WHERE EmployeeId>10
) SELECT * FROM TestTable

3. 游标操作

USE [DB_NAME]

DECLARE CSR_NAME CURSOR FOR
SELECT Column1,Column2 FROM [dbo].[XXX] DECLARE @Column1 INT
DECLARE @Column2 INT OPEN CSR_NAME
FETCH NEXT FROM CSR_NAME INTO @Column1, @Column2
WHILE @@FETCH_STATUS = 0
BEGIN IF @Column1>3
BEGIN
PRINT('First column is bigger than 3!')
END
ELSE IF @Column1=3
BEGIN
PRINT('First column is equals 3!')
END
ELSE
BEGIN
PRINT('First column is less than 3!')
END
FETCH NEXT FROM CSR_NAME INTO @Column1, @Column2
END
CLOSE CSR_NAME
DEALLOCATE CSR_NAME

4. 存储过程模板

USE DBName
GO
IF EXISTS ( SELECT * FROM sys.objects WHERE [Name] = 'SP_NAME' AND [Type] = 'P' )
BEGIN
DROP PROCEDURE dbo.SP_NAME
PRINT @@SERVERNAME + ' - ' + CONVERT ( varchar, GETDATE(), 121 ) + ' : ### ' + DB_NAME() + '.dbo.SP_NAME - dropped'
END
GO
/************************************************************************************************************
Work Request: ProjectName
Module Name: ModuleName
Object Name: DB_NAME
Description:
Parameters: @XXX1 INT
@XXX2 INT
Returns: None
**************************************************************************************************************
Version Control:
Date Version Author WR# Description
2020-06-10 1.0 Name ProjectName Create
*************************************************************************************************************
Unit Test:
EXEC dbo.SP_NAME 1,2
*************************************************************************************************************/
USE [DB_NAME]
CREATE PROC [dbo].[SP_NAME]
--Declare
@XXX1 INT,
@XXX2 INT
AS SELECT * FROM dbo.XXX WHERE XXX1=@XXX1 AND XXX2=@XXX2
GO

5. 函数模板

表值函数:

--Create
USE [DB_NAME]
CREATE FUNCTION BZ_FUNCTION(@Type VARCHAR(1))
RETURNS @AllInfor TABLE (ID INT,NAME VARCHAR(50))
AS BEGIN
IF(@Type='A')
BEGIN
INSERT @AllInfor VALUES (1,'LI LEI')
END
ELSE
BEGIN
INSERT @AllInfor VALUES (2,'HAN MEIMEI')
END
RETURN
END --Usage
SELECT * FROM BZ_FUNCTION('A')

内嵌表值函数(实质也是表值函数):

CREATE FUNCTION IF_GetStudentList(@ClassName VARCHAR(10))
RETURNS TABLE
AS
RETURN (SELECT * FROM Students WHERE ClassName LIKE '%'+@ClassName+'%')
--For Testing:SELECT * FROM IF_GetStudentList(1)

标量值函数:

--Create
USE [DB_NAME]
CREATE FUNCTION BLZ_FUNCTION(@Type VARCHAR(50))
RETURNS VARCHAR(20)
AS BEGIN
DECLARE @Result VARCHAR(20)
IF(LEN(@Type)>=8)
BEGIN
SET @Result='SUCCESSFULL!'
END
ELSE
BEGIN
SET @Result='Failed!'
END
RETURN @Result
END --Usage
SELECT dbo.BLZ_FUNCTION(XXX.ColumnName) FROM [dbo].[XXX]

为什么只有内嵌表值函数而没有内嵌标量值函数:
表值函数返回一个表的数据,内嵌表值函数可以通过传入不同的参数获取不同的返回值列表;
而标量值返回的是一个值,已经无法对返回结果进行拆分,所以内嵌标量值函数没有任何意义;

6. 触发器模板

Instead Of:

在对数据做DML操作之前,需要对数据进行验证,如果验证失败,则该操作会被取消(这应该就是Instead of的具体体现了吧)。

--Instead of means that the actual statement will be replaced by the trigger,so the actual statement will not be executed.
--[Instead trigger] will be executed after the execution of actual statement.
IF (OBJECT_ID('TRG_STU_INSTEADOF', 'TR') IS NOT NULL)
BEGIN
DROP TRIGGER TRG_STU_INSTEADOF
END
GO CREATE TRIGGER TRG_STU_INSTEADOF
ON [dbo].[Students]
INSTEAD OF DELETE
AS
DECLARE @ID INT,@StuName VARCHAR(20)
SELECT @ID=StudentID,@StuName=StudentName FROM deleted
PRINT 'The delete of students information[ID:'+CONVERT(VARCHAR,@ID)+';Name:'+@StuName+'] is successful!';
GO

After:

--By default,the type of trigger is after.(DML)
--[After trigger] will be executed after the execution of actual statement.
IF (OBJECT_ID('TRG_STU', 'TR') IS NOT NULL)
BEGIN
DROP TRIGGER TRG_STU
END
GO
CREATE TRIGGER TRG_STU
ON [dbo].[Students]
FOR INSERT
AS
DECLARE @ID INT,@StuName VARCHAR(20)
SELECT @ID=StudentID,@StuName=StudentName FROM inserted
PRINT 'The adding for students information[ID:'+CONVERT(VARCHAR,@ID)+';Name:'+@StuName+'] is successful!';
GO

7. 常见脚本

  A. 循环写入测试数据

DECLARE @ID INT=0
WHILE @ID<40000
BEGIN
INSERT INTO CCTV VALUES ('Johnson','How to insert test data to our DB?',GETDATE(),GETDATE(),0)
SELECT @ID=MAX(ID) FROM CCTV
END

  B. 评估SQL的执行时间

USE DBName
DECLARE @StartTime DateTime,
@EndTime DateTime
SET @StartTime=GetDate()
--Your scripts
SET @EndTime=GetDate()
PRINT('Total '+CONVERT(VARCHAR,DATEDIFF(millisecond,@StartTime,@EndTime)) +' milliseconds were used!');

  c. 根据一个表更新另一个表的值

UPDATE TB1
SET TB1.TB1_Name=TB2.TB2_Name
FROM dbo.TB1
LEFT JOIN dbo.TB2 ON TB1.ID=TB2.ID
WHERE TB1_Name IS NULL

8 . 系统表操作

系统表SYSOBJECTS中的列XTYPE所代表的类型:

--C:Check约束
--D:Default约束
--PK:PRIMARY KEY约束
--F:FOREIGN KEY约束
--UQ:UNIQUE约束 --L:LOG --S:SYSTEM TABLES
--U:User TABLES
--V:View
--P:Procedure
--TF:表值函数
--IF:内嵌表值函数(在一个函数内部嵌入一个表值函数,也属于表值函数)
--FN:标量值函数
--TR:Trigger --X:Extension Procedure
--RF:复制筛选存储过程

常见用法:

--查询一个表用到的所有触发器:
SELECT * FROM SYSOBJECTS WHERE xtype='TR' AND parent_obj=OBJECT_ID('Table_Name') --查询一个表中所有的列名
SELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID('Table_Name') --查询一个表中所有的列名及数据类型
SELECT A.Name AS ColumnNAME,B.Name AS DataType FROM SYSCOLUMNS A
LEFT JOIN SYSTYPES B ON A.XTYPE=B.xtype WHERE A.ID=OBJECT_ID('Table_Name') --查询一个表中所有的列名及数据类型(包含表的类型)
SELECT A.Name AS FieldName,B.Type_Desc,B.Type,C.Name AS TypeName FROM SYS.COLUMNS A
LEFT JOIN SYS.OBJECTS B ON A.object_id=B.object_id
LEFT JOIN SYS.TYPES C ON A.system_type_id=C.system_type_id
WHERE B.type='U' AND CHARINDEX('UDT',C.name,0)<=0 AND CHARINDEX('SYS',C.name,0)<=0 AND B.name='Table_Name' --读取数据库对象脚本(Only For View/SP/Function/Trigger)
SP_HELPTEXT Obj_Name

9. 其他用法

查看SQLServer当前版本号及详细信息:select @@version

查看当前数据库的使用用户:sp_who

结束某个用户对当前数据库的使用:kill spid

SQL Server常见基础操作的更多相关文章

  1. Sql Server数据库基础

    --------------------------------------第一章  Sql Server数据库基础------------------------------------------ ...

  2. 第一篇——第一文 SQL Server 备份基础

    原文:第一篇--第一文 SQL Server 备份基础 当看这篇文章之前,请先给你的所有重要的库做一次完整数据库备份.下面正式开始备份还原的旅程. 原文出处: http://blog.csdn.net ...

  3. C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用

    C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. . ...

  4. SQL SERVER常见等待——解决会话等待产生的系统问题

    SQL SERVER——解决会话等待产生的系统问题 转自: https://blog.csdn.net/z_cloud_for_SQL/article/details/55051215 版权声明:SQ ...

  5. SQL Server内存遭遇操作系统进程压榨案例

    场景: 最近一台DB服务器偶尔出现CPU报警,我的邮件报警阈(请读yù)值设置的是15%,开始时没当回事,以为是有什么统计类的查询,后来越来越频繁. 探索: 我决定来查一下,究竟是什么在作怪,我排查的 ...

  6. SQL Server常见数据类型介绍

    数据表是由多个列组成,创建表时必须明确每个列的数据类型,以下列举SQL Server常见数据类型的使用规则,方便查阅. 1.整数类型 int 存储范围是-2,147,483,648到2,147,483 ...

  7. cmd常用命令 和 sql server相关基础

    在Java开发中 ms sql server 接触算是比较少的,本文记录一些ms sql server的基础知识. 1. 为表字段增加索引:create index user_openid on us ...

  8. Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表)

    Sql Server 函数的操作实例!(执行多条语句,返回Select查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ==== ...

  9. Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表)

    Sql Server 函数的操作实例!(返回一条Select语句查询后的临时表) SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUN ...

随机推荐

  1. JAVA基础知识之数据类型

    JAVA的数据类型知识点主要包括基本数据类型,包装类,字符串类(String,StringBuffer, StringBuilder区别和用法),数组,数据类型转换等等,暂时只想到这么多,后面会再补充 ...

  2. 模块shimgvw.dll已加载,但找不到入口点DllRegisterServer

    [环境]Windows 7 / Windows Server 2008 [现象]在文件夹浏览器中不能显示图片缩略图. [错误信息]查系统日志,有如下消息:“模块shimgvw.dll已加载,但找不到入 ...

  3. shell中sed用法

    简介 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的 ...

  4. shell中cut用法

    cut是一个选取命令,就是将一段数据经过分析,取出我们想要的.一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的. (1)其语法格式为:cut  [-bn] [file] 或 cut ...

  5. xcode下编译.a文件的路径

    http://www.it165.net/pro/html/201503/36842.html 每当我们编译之后, 实际上系统就给我编译好了一个可以运行的.app文件,在某个路径下 如果我们建立的是静 ...

  6. mysql数据小姿势

    CREATE TABLE `information` (  `NUMBER` bigint(20) NOT NULL AUTO_INCREMENT,//将number设为自增字段  `USER_NAM ...

  7. jdk安装环境变量设置

    设置JAVA_HOME,点击新建,变量名:JAVA_HOME,变量值:D:\java\jdk1.7.0,即刚才jdk安装的路径.   设置CLASSPATH属性,变量名:CLASSPATH,变量值:. ...

  8. LVM逻辑分区

    视频:http://v.youku.com/v_show/id_XNTk2NzExMTg0.html?f=27874439&o=1&spm=0.0.playList.5!3~5~A.t ...

  9. hdu 5693 朋友 博弈

    朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Descr ...

  10. FLASH CC 2015 CANVAS 中 gotoAndStop、gotoAndPlay() 不起作用

    哎 话不多说先看我的代码: //舞台上 放着sp0.sp1....sp8,9个mc,每个mc都有几帧, //帧上有如下代码 var S=this; S.stop() inIt1();//not wor ...