`
izuoyan
  • 浏览: 9224301 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SQL 2008 T-Prep 上课心得(三)

阅读更多

SQL Server 2008 提供的日期/时间格式

数据型态

格式

范围

精确度

所占空间

使用者自定义局部秒精确度

时区位移

time

hh:mm:ss[.nnnnnnn]

00:00:00.0000000 ~ 23:59:59.9999999

100 nanoseconds

3 ~ 5

date

YYYY-MM-DD

0001-01-01 ~ 9999-12-31

1

3

smalldatetime

YYYY-MM-DD hh:mm:ss

1900-01-01 ~ 2079-06-06

1 minute

4

datetime

YYYY-MM-DD hh:mm:ss[.nnn]

1753-01-01 ~ 9999-12-31

0.00333 second

8

datetime2

YYYY-MM-DD hh:mm:ss[.nnnnnnn]

0001-01-01 00:00:00.0000000 ~ 9999-12-31 23:59:59.9999999

100 nanoseconds

6 ~ 8

datetimeoffset

YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm

0001-01-01 00:00:00.0000000 ~ 9999-12-31 23:59:59.9999999 (in UTC)

100 nanoseconds

8 ~ 10

· 变动的精确数可以节省空间

· 时间与日期分开,在利用 between and 取间隔时可方便许多

· 旧的时间函数可以使用新的数据型态,提供新的时间函数以取得更精确的时间

数据表型态的参数

· 可以先定义数据表 Type,再宣告该型态的变量
CREATE TYPE mytab AS TABLE (id int);
DECLARE @t mytab;

· 传递数据表型态的参数是只读的

T-SQL 语法增强

· 可以一行指令同时宣告变量与初始化值
DECLARE @i int = 4

· C 格式的累加运算符,以下范例 @i 会变成 256,因为 2*2 -> 4*4 -> 16*16
DECLARE @i INT=2
SELECT TOP 3 @i*=@i FROM sys.objects
SELECT @i

· 单句话新增多笔记录
DECLARE @t TABLE (id int, name varchar(20));
INSERT INTO @t VALUES (1, 'Fred'), (2, 'Jim'), (3, 'Sue');

Grouping Sets
符合 ANSI 的标准语法,可以搭配 Group By 子句,取得以往 Rollup Cube 的效果。例如:

SELECT Country,TitleOfCourtesy,COUNT(EmployeeID) 汇总结果 FROM Employees
GROUP BY Grouping Sets(Country,TitleOfCourtesy,(Country,TitleOfCourtesy))
Order By Country DESC,TitleOfCourtesy

结果:
image

Merge 语法

· 来源与目的数据比较后,以一句话完成新增、修改、删除等动作,如同单一句话自动会有交易,透过 Merge 语法所有数据更新的动作都包在一个交易内,不像以往需明确定义交易,然后包装所有变更。

· ANSI SQL 2006 相容并与以延伸

· 若用 UPDATE FROM JOIN 语法变更数据,若来源端有两笔以上纪录对应到目的端,则以哪一笔记录更新将无法推测,Merge 语法则直接回传错误

CREATE TABLE tbSource(C1 INT PRIMARY KEY,C2 NVARCHAR(10))
GO
INSERT tbSource VALUES(1,N''),(2,N'')
GO
SELECT * INTO tbDest FROM tbSource

DELETE tbSource WHERE c1=1
UPDATE tbSource SET c2=N'2' WHERE C1=2
INSERT tbSource VALUES(3,N'')

MERGE tbDest D
USING tbSource s
ON D.c1 = S.c1
WHEN MATCHED THEN --修改
UPDATE SET D.c2 = S.c2
WHEN SOURCE NOT MATCHED THEN --删除
DELETE
WHEN TARGET NOT MATCHED THEN --新增
INSERT VALUES(c1, c2)
OUTPUT $action, INSERTED.c1 [New c1],
INSERTED.c2 [New c2],
DELETED.c1 [Original c1],
DELETED.c2 [Original c2];

image

空间数据格式

· 提供两种数据型态

· Geometry:平面地球

· Geography:圆地球

· 特殊数据型态是以 SQLCLR UDT 的方式实做

· 使用 "." 来存取属性,或是呼叫实例的函数

· 使用 "::" 来呼叫静态函数

· 函数属性名称要区分大小写

· 结合微软 Virtual Earth 建立 SQL 空间数据的范例网页:http://mikeo.co.uk/demo/sqlspatial/default.aspx

Hierarchyid

· SQLCLR UDT 实做的特殊数据型态

· 储存有阶层性的数据,便利维护树状结构,例如档案架构、组织阶层

· 提供 GetRootGetLevelIsDescendantGetDescendantGetAncestorReparent 等方法

-- Step 1: 建立有阶层特征的数据表
-- HierarchyID 可比较,因此可当作主键
CREATE TABLE tbEmployee
(
OrgNode HierarchyID PRIMARY KEY CLUSTERED,
OrgLevel AS OrgNode.GetLevel(),
EmployeeID int UNIQUE NOT NULL,
EmpName nvarchar(20) NOT NULL) ;
GO

-- Step 2: 建立 breadth-first 索引,也就是相同父亲的数据放在一起
-- 以数值 OrgLevel 放在前面,然后才是结点
CREATE UNIQUE INDEX EmployeeOrgNc1
ON tbEmployee(OrgLevel, OrgNode) ;
GO

-- Step 3: 加载数据
-- 载入根结点
INSERT tbEmployee(OrgNode, EmployeeID, EmpName)
VALUES (hierarchyid::GetRoot(), 1, N'') ;
GO

SELECT OrgNode.ToString() [文字描述阶层],
OrgNode, OrgLevel, EmployeeID, EmpName
FROM tbEmployee ;

image


GO

--透过 GetDescendant 函数建立第一个子结点
DECLARE @Manager hierarchyid
SET @Manager = (SELECT OrgNode FROM tbEmployee WHERE EmployeeID = 1)

--加入子结点,因为是第一个子结点,所以不需要算位置
INSERT tbEmployee (OrgNode, EmployeeID, EmpName)
VALUES
(@Manager.GetDescendant(NULL, NULL), 12, N'') ;
GO

SELECT OrgNode.ToString() AS [文字描述阶层],
OrgNode, OrgLevel, EmployeeID, EmpName
FROM tbEmployee ;
GO

image

-- Step 4: 建立新增节点的共享预存程序
CREATE PROC AddEmp(@mgrid int, @empid int, @e_name nvarchar(20))
AS
BEGIN
-- mOrgNode 父节点
-- lc 该父节点的最后一个子结点
DECLARE @mOrgNode hierarchyid, @lc hierarchyid
SELECT @mOrgNode = OrgNode
FROM tbEmployee
WHERE EmployeeID = @mgrid

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION
SELECT @lc = max(OrgNode)
FROM tbEmployee
WHERE OrgNode.GetAncestor(1) =@mOrgNode ; --传回上一阶,相同父节点的最大子结点

INSERT tbEmployee(OrgNode, EmployeeID, EmpName)
VALUES(@mOrgNode.GetDescendant(@lc, NULL), @empid, @e_name) --将新增节点加在父节点最大的孩子旁
COMMIT
END ;
GO

EXEC AddEmp 12, 121, N'';
EXEC AddEmp 12, 122, N'';
EXEC AddEmp 1, 13, N'';
EXEC AddEmp 121, 1211, N'';
EXEC AddEmp 13, 131, N'';
GO

SELECT OrgNode.ToString() AS [文字描述阶层],
OrgNode, OrgLevel, EmployeeID, SPACE(OrgNode.GetLevel()*5) + EmpName
FROM tbEmployee;

image

分享到:
评论

相关推荐

    开源项目-hexdigest-prep.zip

    压缩包中的prep-master目录很可能是项目的源代码,包括了Go语言的源文件、测试文件、示例以及可能的文档。开发者可以查看源码来了解具体的实现细节,通过阅读`README.md`文件获取项目使用说明和安装指南,或者通过`...

    Algorithm-software-engineer-career-prep.zip

    "software-engineer-career-prep-master" 这个文件名暗示了压缩包可能包含一系列的学习资源,如教程、练习题、解题策略和面试经验分享,利用这些资源深入学习和实践,将极大地提升你在面试中的竞争力。记住,理论与...

    Tableau-prep操作手册

    1. **连接到数据**:Tableau Prep 支持多种数据源的连接,包括常见的数据库(如SQL Server、Oracle等)、文件(CSV、Excel、JSON等)以及通过ODBC或自定义连接器连接。用户可以通过内置连接器轻松接入,并可以选择...

    ace05-data-prep-master.rar

    【ace05-data-prep-master.rar】是一个压缩文件,通常包含源码或其他项目资源,用于数据预处理。从标签"源码"我们可以推断,这个压缩包可能包含一个编程项目,特别是与数据处理相关的代码。文件名暗示了这可能是针对...

    Liberwin-AI-training-model-json-prep

    以标题"**Liberwin-AI-training-model-json-prep**"为例,我们可以推测这是一份关于使用Python进行Liberwin AI训练模型的数据预处理,特别是针对JSON格式数据的准备工作。JSON(JavaScript Object Notation)是一种...

    Plate-Prep-DB-API

    在"Plate-Prep-DB-API"中,"DB"(数据库)部分可能包括设计数据库模式,创建表结构,定义字段类型和约束,以适应实验板数据的存储需求。这些数据可能包含实验板编号、样品信息、实验条件等。数据库设计应遵循最佳...

    ace05-data-prep:ACE 2005 Corpus预处理(有关如何运行mgormleyace-data-prep的提示)

    我们将主要关注mgormleyace-data-prep项目,这是一个基于Java、Maven和Stanford CoreNLP工具的预处理框架。 首先,我们需要理解的是ACE 2005语料库的结构。它包含了多种类型的数据,如新闻文本、广播对话等,每个...

    sei-premium-prep-72

    sei-premium-prep-72 运行本地服务器 转到项目文件夹 cd ~/Projects/sei-premium-prep-72 公开VS代码 code . 打开实时服务器 在VS Code上按command + shift + p 键入Live Server ,然后按Enter 注意:在第2步之后...

    2-prep-handout.pdf

    σ-域F是一个集合类,满足三个条件:它包含Ω,对任意集合的补集封闭,并且对可数并集封闭。这意味着我们可以判断哪些事件可能发生。 随机变量是概率空间上的实值函数,它将样本点映射到实数。随机向量是随机变量的...

    usb_prep8.zip

    《USB_prep8:打造XP系统安装U盘的利器》 USB_prep8是一款高效实用的工具,专门用于将普通USB闪存驱动器转化为可引导的Windows XP安装盘。这个压缩包“usb_prep8.zip”包含了创建XP系统安装U盘所需的所有必要文件和...

    RHCE-prep-guide

    RHCE RHEL 5 考前注意事項 (考試重點項目)

    selex-ngs-prep

    selex-ngs-prep Selex-ngs-prep是一个NextFlow工作流程,用于数据准备和对来自SELEX实验的下一代测序(NGS)文件进行质量评估。 该管道适用于FASTQ格式的多路分解的文件。 FASTQ文件中的序列应由5'引物,随机区域...

    MCTS SQL Server 2008 Exam 70-432

    《The Real MCTS SQL Server 2008 Exam 70-432 Prep Kit.pdf》这本书作为备考资料,应详细介绍了这些主题,并提供了实践案例和模拟试题,帮助考生巩固理解,为实际考试做好准备。通过深入学习和实践,考生将能够熟练...

    程序员考试刷题-c--part1-exam-prep1:c--part1-exam-prep1

    程序员考试刷题c--part1-exam-prep1 问题 1 – 3-6-9 在秘密服务中,他们使用非常秘密的技术来发送加密的秘密信息。 一种这样的秘密技术是将秘密文本作为用秘密代码秘密编码的秘密数字发送。 不幸的是,负责该特定...

    程序员考试刷题-c--part1-exam-prep2:c--part1-exam-prep2

    程序员考试刷题c--part1-exam-prep2 问题 1 – 虫族!!! Prelate Zeratul 和 High Templar Tassadar,来自 Protoss 种族的高度灵能外星生命形式,聚在一起了解低级基本异形 Zerg(保加利亚语“дзверг”)...

    Anna-Interview-Prep:我对各种编码挑战的解决方案,包括LeetCode,HackerRank,CodeWars,CodingBat等来源

    《Anna-Interview-Prep:全面解析编码挑战与面试准备》 编程面试是技术领域求职者面临的关键环节,它不仅考验候选人的基础知识,更着重于实际问题解决能力。本资源包"Anna-Interview-Prep"正是为了帮助你充分准备...

    Microsoft-Win32-Content-Prep-Tool:包装Win32 App的工具,然后可以将其上传到Intune

    Microsoft Win32内容准备工具使用Intune管理Windows应用程序(.intunewin) 使用Microsoft Win32 Content Prep Tool预处理Windows Classic应用程序。 打包工具将应用程序安装文件转换为.intunewin格式。 打包工具还...

Global site tag (gtag.js) - Google Analytics