Linq学习笔记(16)- Min, Max, Average操作

by Kimi 18. November 2009 11:39

Kimi

示例1:

    简单的Min和Max操作。

    运行结果:

 

示例2:

    查询处字符串数组中,长度最大和最小的字符。

    显示结果:

 

示例3:

    在Group操作中使用Min 和 Max。

 

显示结果:

Average 的操作与Max 和 Min 相同,只是取平均值。

Tags:

技术文章

返回插入到标识列中的值(SCOPE_IDENTITY, IDENT_CURRENT 和 @@IDENTITY)

by Kimi 9. November 2009 16:09

Kimi

    在写SQL的时候,我们经常会遇到一种情况。那就是一个表中的某个列是自增的标识列,在插入记录到这个表后,我们需要返回这个标识列的值。

    我们通常都会习惯性的使用@@IDENTITY 来获得这个值。其实SQL Server 不只提供一个@@IDENTITY这个一个方式来获得新插入自增标识列的值,还有 SCOPE_IDENTITYIDENT_CURRENT 这两个函数。下面我们就来看看这个3个函数的区别,以及我们如何正确的选用它们。

    下面先给出MSDN上对这3个函数的描述:

@@IDENTITY

    返回最后插入的标识值的系统函数

备注:

    在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包含语句生成的最后一个标识值。如果语句未影响任何包含标识列的表,则 @@IDENTITY 返回 NULL。如果插入了多个行,生成了多个标识值,则 @@IDENTITY 将返回最后生成的标识值。如果语句触发了一个或多个触发器,该触发器又执行了生成标识值的插入操作,那么,在语句执行后立即调用 @@IDENTITY 将返回触发器生成的最后一个标识值。如果对包含标识列的表执行插入操作后触发了触发器,并且触发器对另一个没有标识列的表执行了插入操作,则 @@IDENTITY 将返回第一次插入的标识值。出现 INSERT 或 SELECT INTO 语句失败或大容量复制失败,或者事务被回滚的情况时,@@IDENTITY 值不会恢复为以前的设置。

 

SCOPE_IDENTITY()

    返回插入到同一作用域中的标识列内的最后一个标识值。一个范围是一个模块:存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。

备注:

    SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。

 

IDENT_CURRENT

    返回为某个会话和作用域中指定的表或视图生成的最新的标识值。

备注:

    IDENT_CURRENT 返回为某个会话和用域中的指定表生成的最新标识值。在空表中调用 IDENT_CURRENT 函数时,此函数将返回 NULL。

 

    从MSDN上看,这3个函数的主要区别就是一个会话和作用域的问题:

  • IDENT_CURRENT 返回为某个会话和用域中的指定表生成的最新标识值。
  • @@IDENTITY 返回为跨所有作用域的当前会话中的某个表生成的最新标识值。
  • SCOPE_IDENTITY 返回为当前会话和当前作用域中的某个表生成的最新标识值。

 

    接下来,我们需要通过示例来看看这个3个函数的区别

-- 创建一个表TA, 为它定义一个自增列ID, 默认这个列是从开始自增.

CREATE TABLE TA(ID int IDENTITY);

-- 创建另一个表TB, 为它定义一个自增列ID, 设置这个列是从开始自增.

CREATE TABLE TB(ID int IDENTITY(100,1));

GO

-- 为表TA 创建一个INSERT的出发器,让给TA 表插入数据后, 给TB 表也插入数据.

CREATE TRIGGER TA_INSERT ON TA FOR INSERT

AS

BEGIN

INSERT TB DEFAULT VALUES

END;

GO

 

SELECT * FROM TA;

--ID is empty.

 

SELECT * FROM TB;

--ID is empty.

 

-- 在一个会话(session)中运行这些语句. --------------------

-- 向TA表插入一条默认记录.

INSERT TA DEFAULT VALUES;

SELECT @@IDENTITY;

/* 返回的值是100. 因为使用的是@@IDENTITY, 它得到的结果是触发器执行的插入数据到TB表后返回的标识列的值.*/

 

SELECT SCOPE_IDENTITY();

/* 返回的值是1. 因为向TA表插入的一条记录, 然而SCOPE_IDENTITY()是不能垮作用域的,那么它只获得插入TA表操作时返回的标识列的值.*/

 

SELECT IDENT_CURRENT('TB');

/* 返回插入TB表的标识列的值, 100.*/

 

SELECT IDENT_CURRENT('TA');

/* 返回插入TA表的标识列的值, 1.*/

 

-- 在另一个会话(session)中运行这些语句.

SELECT @@IDENTITY;

/* 返回的是NULL, 因为当前会话(session)中没有插入操作.*/

 

SELECT SCOPE_IDENTITY();

/* 返回的是NULL, 因为当前会话(session)当前作用域中没有插入操作*/

 

SELECT IDENT_CURRENT('TB');

/* 返回最后插入TB表的标识列的值, 100.*/

 

注意的一点是,作用域指的是一个模块:存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。我们来看一个示例:

-- 创建一个存储过程, 其功能就是往TA表插入一条记录

CREATE PROCEDURE usp_ins_TA

AS

BEGIN

    INSERT TA DEFAULT VALUES;

END

 

-- 插入一条记录到TA表.

INSERT TA DEFAULT VALUES;

-- 调用存储过程插入一条记录到TA表.

EXECUTE usp_ins_TA;

 

SELECT @@IDENTITY;

/* 返回的结果是2, 因为执行了两次插入操作. */

 

SELECT SCOPE_IDENTITY();

/* 返回的结果是1, 因为尽管执行了两次操作, 但是第二次操作是调用一个存储过程, 那么它属于另一个范围内. */

 

SELECT IDENT_CURRENT('TA');

/* 返回的结果是2, 因为执行了两次插入操作. */

 

通过这两个示例,我想大家应该明白了这个3个函数的用法。(Kimi 2009-03-25)

Tags:

技术文章

Linq学习笔记(15)- Sum操作

by Kimi 9. November 2009 09:19

Kimi Yang

示例1:

    通过Sum计算出数组的和。

    运行结果为:

 

示例2:

    计算出字符串数组中的所有的字母个数。

运行结果为:

 

示例3:

    在Group中使用Sum

    运行结果为:

Tags:

技术文章

lLinq学习笔记(14)- Count操作

by Kimi 4. November 2009 09:07

Kimi Yang

示例1:

    使用Count,统计数组中的元素个数。

    运行结果:

 

示例2:

    带条件的Count, 统计数组中的奇数个数。

运行结果:

 

示例3:

    嵌套的Count。

运行结果:

 

示例4:

    在Group中使用Count。

    运行结果:

Tags:

技术文章

Visual Studio 2010 Beta2 抢先体验

by Kimi 23. October 2009 10:40

Kimi Yang

Microsoft在10月21日发布了Visual Studio 2010 Beta2 的测试版。在Visual Studio 2010 的产品系列中,分为如下几个版本:

  • Microsoft® Visual Studio 2010 Professional Edition
  • Microsoft® Visual Studio 2010 Premium Edition
  • Microsoft® Visual Studio 2010 Ultimate Edition

 

今天我就来尝试安装和试用一下Visual Studio 2010 Beta2。首先是在官方网站上下载了安装的ISO文件,由于里面没有包括MSDN帮助文件,所以只有2.3G左右。

把ISO 加载入虚拟光驱,运行安装。

貌似一点也不省空间。

去掉了几个不用的选项,貌似还是很大,而且占用的是C盘,o(╯□╰)o。

不管那么多了,开始安装。(中间没有步骤提示输入序列号)

现在可以去泡杯茶喝了……

当安装完.Net Framework 4.0 Beta 2的时候,系统提示重启。

 

终于安装完成了,现在启动看看,启动的等待画面还真不错!

图标也变了样了。

挺不错的,现在来看看IDE界面。启动界面也不一样了。

由于VS2010的IDE界面是使用WPF技术来创建,所有在Vista,Windows 7这样的系统中,效果会非常好。

新建项目中,跟2008一样,可以选择其它.NET平台的版本进行开发。

2010的另一个亮点,就是提供一个动态语言F#,由于我不太了解,就不多说了。

我们主要关注的还是Web开发,所以在Web项目中,多了MVC2这个版本。

OK,今天的安装非常成功,今后在学习中有些什么新玩意儿,会第一时间给大家分享。

Tags:

技术文章

Linq学习笔记(13)-Any, All操作

by Kimi 14. October 2009 12:33

Kimi Yang

Any

示例:

    检查数组中是否有数字小于5。

运行结果:

 

All

示例:

    检查数组中是否都是奇数。

    运行结果:

Tags:

技术文章

Linq学习笔记(12)-Range, Repeat操作

by Kimi 14. October 2009 12:32

Kimi Yang

Range

示例:

    获得从11开始的10个数字序列,并通过Select 创建一个匿名类型。

    运行结果:

 

Repeat

示例:

    生成一个序列,包含5个100。

    显示结果:

Tags:

技术文章

浏览器

by Kimi 18. September 2009 13:12

Kimi Yang

对于现在的web系统开发,千万别只顾着IE6 这个过时了不能再过时的浏览器,应该想想如何兼容当前主流的浏览器。

当下主流的浏览器有这些:

我想大家应该都熟悉这些,只不过Safari知道的人少一些,这个是苹果机器上的浏览器。当然它肯定有For Windows版本了(要不能我怎么可以装上)。其实还有其它一些浏览器,比如遨游,QQ的浏览器,360的浏览器等,这些都是基于IE内核的,所以IE能兼容,这些也都能兼容。

 

那么,我们开发一个Web系统,为了能支持这些浏览器,首先开发的时候尽量用标准的方式,比如标准的HTML,标准的CSS,标准的脚本等。

 

测试的时候呢,尽量能够把这些浏览器都能简单的过一遍。特别是你写了很多脚本的地方,这个特别容易出现浏览器兼容问题。

 

这里还有一个工具可以推荐给大家,Microsoft Expression Studio 3 中,提供了一个工具叫做 Microsoft Expression Web 3 SuperPreview。

看到这个界面,就知道是干什么的吧。 它可以模拟 FireFox(版本根据你机器安装的相关),IE6,IE7,IE8 对网页的渲染情况。

美中不足的是,他只能包含这几种浏览器,比如我的Chrome,Opera等,就不能在这里面应用,据说要等到下个版本才可以。

 

另外,我还发现一个小问题,Google Chrome浏览器,竟然没有大图标显示。我想这个应该要改进一下。

Tags:

使用技巧

Linq学习笔记(11)-First, Last, ElementAt操作

by Kimi 18. September 2009 12:46

Kimi Yang

First,Last

示例1:

    运行结果:

示例2:

    加有Index的First和Last操作。

    运行结果:

示例3:

演示FirstOrDefault 和 LastOrDefault。

运行结果:

ElementAt

示例:

    运行结果:

Tags:

技术文章

Linq 学习笔记10 –ToArray, ToList, ToDictionary, OfType操作

by Kimi 27. August 2009 12:31

Kimi Yang

ToArray

示例:

    定义一个匿名类型的结合,对集合进行查询操作,并把结果转换成int数组。

 

    运行结果:

 

 

ToList 和 ToArray操作相同。

 

ToDictionary

示例:

    通过ToDictionary把结合的元素存储到一个Dictionary中。

 

    运行结果:

 

 

OfType

示例:

    使用OfType,取得集合中类型符合的元素。

 

    运行结果:

Tags:

技术文章

Copyright © 2009 APJ Software

最新评论

Comment RSS

公告

欢迎使用APJ Blog!

日历

<<  February 2012  >>
MoTuWeThFrSaSu
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

View posts in large calendar