SQL Server常见操作

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. 游标操作

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

3. 存储过程模板

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

4. 函数模板

表值函数:

--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]

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

5. 触发器模板

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

6. 系统表操作

系统表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

时间: 2024-12-30 02:57:28

SQL Server常见操作的相关文章

SQL Server常见数据类型介绍

数据表是由多个列组成,创建表时必须明确每个列的数据类型,以下列举SQL Server常见数据类型的使用规则,方便查阅 Character 字符串: 数据类型 描述 存储 char(n) 固定长度的字符串.最多 8,000 个字符. n varchar(n) 可变长度的字符串.最多 8,000 个字符.   varchar(max) 可变长度的字符串.最多 1,073,741,824 个字符.   text 可变长度的字符串.最多 2GB 字符数据.   Unicode 字符串: 数据类型 描述

SQL Server常见数据类型的介绍

数据表是由多个列组成,创建表时必须明确每个列的数据类型.以下列举SQL Server常见数据类型的使用规则. 整数类型 int 存储范围是-2,147,483,648到2,147,483,647之间的整数,主键列常设置此类型.(每个数值占用 4字节) smallint 存储范围是-32,768 到 32,767 之间的整数,用来存储限定在特定数值范围内的数据.(每个数值占用 2 字节) tinyint 存储范围是0到255 之间的整数,用来存储有限数目的数值.(每个数值占用 1 字节) bigi

SQL SERVER 时间相关操作笔记

1.DATEADD函数: A.  MSDN上的示例:http://msdn.microsoft.com/zh-cn/library/ms186819%28v=sql.90%29.aspx B. SQL2005上的示例 1 ----定义变量 2 DECLARE @start DATETIME,@end DATETIME 3 SET @start='2014-01-01' 4 SET @end='2014-06-16' 5 6 ---- 计算月份 7 SELECT DATEADD(YEAR,-6,@

VS2010连接SQL Server 2008操作与编程 (笔记)

实现VS2010连接SQL Server 2008操作与编程,主要记录的是一个学习的过程. 实现VS2010连接SQL Server 2008:逗逗飞的专栏 实现VS2010连接SQL Server 2008代码:点击打开链接 ADO的三个指针: _ConnectionPtr:用于建立数据库的连接. _RecordsetPtr:它是专门为通过记录集操作数据库而设立的指针,通过该接口可以对数据库的表内的记录.字段等进行各种操作. _CommandPtr:提交的sql查询字符串指针 目的:连接数据库

VBA连接SQL SERVER数据库操作Excel

 VBA连接SQL SERVER数据库操作Excel. Sub 按钮1_Click() Dim i As Integer, j As Integer, sht As Worksheet 'i,j为整数变量:sht 为excel工作表对象变量,指向某一工作表 'Dim cn As New ADODB.Connection '定义数据链接对象 ,保存连接数据库信息:请先添加ADO引用 'Dim rs As New ADODB.Recordset '定义记录集对象,保存数据表 '工具 ---〉引用

SQL Server常见的操作符

常见的操作符:Sort.Hash Match(聚合).Filter.Compute Scalar等 一:Sort select Shelf from Production.ProductInventory order by Shelf 在进行聚集索引扫描操作后,数据集进行了Sort操作.当优化器认为在执行过程中需要对数据尽心排序时,就会产生这个操作. 整个查询对1069行数据进行了排序操作.排序操作本身不是问题,问题是他的开销已经达到了76%.因为没有索引存在.只能执行Sort操作,这个列子是缺

sql server常见配置函数及其功能

配置函数用于返回配置选项的设置信息,常见如下: [email protected]@DATEFIRST 针对会话返回SET DATEFIRST的当前值,set  datefirst表示指定的每周的第一天, 美国英语中默认1对应星期一,2对应星期二,以此类推,7对应周日,周日在西方表示每周的第一天 示例:以下设置5,周五作为每周的第一天,并假定今天是周五,即今日是以周五为第一天 set datefirst 5 go select @@DATEFIRST 第一天,datepart(DW,getdat

sql server 常见错误代码15000 - 15999含义解析

错误 15000 - 15999 SQL Server 2008 R2 其他版本 错误 严重性 是否记录事件 说明(消息正文) 15001 16 否 对象 '%ls' 不存在或不是此操作的有效对象. 15002 16 否 无法在事务中执行过程 '%s'. 15003 16 否 只有 %s 角色的成员才能执行此存储过程. 15004 16 否 名称不能是 NULL. 15005 10 否 已更新了所有表的统计信息. 15006 16 否 '%s' 是无效名称,因为其中包含无效字符. 15007 1

SQL Server数据库操作

通过SQL Server建库语句等,采用纯代码方式创建数据库,创建数据表,以及进行相应数据库操作,包括检索,插入,删除,修改. 以下通过一个例题说明数据库操作. 某仓储超市采用POS(Point of Sale)收银机负责前台的销售收款,为及时掌握销售信息,并依此指导进货,拟建立商品进.销.存数据库信息管理系统.经过系统需求分析.概念结构设计和逻辑结构设计,可以简化得到如下一组关系模式(其中     表示主键,    表示外键): 积分卡(用户编号,用户名,累积消费金额,积分点) 销售详单(销售