在SQL Server 2000中,VARCHAR的最大长度是8000,如果字符串的长度超过8000,保存在VARCHAR中时就会被截断。
也不能定义DECLARE @largeText TEXT ,常见的字符串函数也不能使用,除了datalength,substring(substring中英文字符作为一个字符)。

这几个数据类型在行为上和较小的数据类型 varchar、nvarchar 和 varbinary 相同,最大长度都为2^31-1。

微软的说法是用这个数据类型来代替之前的text、ntext 和 image 数据类型,它们之间的对应关系为:

varchar(max)——-text;

nvarchar(max)—–ntext;

varbinary(max)—-image.

注意:
1.VARCHAR和VARCHAR(MAX)混在一起做处理时还是会变成VARCHAR,从而可能被截断,所以需要全转成VARCHAR(MAX)

2.在变量声明中使用 char 和 varchar 数据类型时,这些数据类型的默认值 n 为 1。

3.在 CAST 和 CONVERT 中使用 varchar 时,显示 n 的默认值为30。

MSSQL2005新增了四个排名函数,ROW_NUMBER, RANK, DENSE_RANK, NTILE。利用这些函数可以有效地分析数据以及向查询的结果行提供排序值。

建立测试数据,分析它们各自的作用。

CREATE TABLE [Test]
(
     [StudentID] [bigint] NOT NULL,
     [ClassID] [bigint] NOT NULL,
     [TestScore] [decimal](4, 1) NOT NULL
) ON [PRIMARY]
 GO

 INSERT INTO [Test]  VALUES (100001,100,90) 
 INSERT INTO [Test]  VALUES (100002,100,85.5)
 INSERT INTO [Test]  VALUES (100003,100,80)
 INSERT INTO [Test]  VALUES (100004,100,80)
 INSERT INTO [Test]  VALUES (100005,100,74)
 INSERT INTO [Test]  VALUES (101001,101,94)
 INSERT INTO [Test]  VALUES (101002,101,85.5)
 INSERT INTO [Test]  VALUES (101003,101,85.5)

测试代码:

 SELECT *, 
      ROW_NUMBER() OVER (ORDER BY TestScore DESC) as RN,
      RANK() OVER (ORDER BY TestScore DESC) as R,
      DENSE_RANK() OVER (ORDER BY TestScore DESC) as DR,
      NTILE(3) OVER (ORDER BY TestScore DESC) as N3
 FROM [Test]

执行结果:

StudentID ClassID  TestScore   RN    R   DR   N
--------- -------- ----------- ----- --- ---- -
101001    101      94.0        1     1   1    1
100001    100      90.0        2     2   2    1
100002    100      85.5        3     3   3    1
101002    101      85.5        4     3   3    2
101003    101      85.5        5     3   3    2
100003    100      80.0        6     6   4    2
100004    100      80.0        7     6   4    3
100005    100      74.0        8     8   5    3

通过以上的例子就很清晰了。

ROW_NUMBER
行号函数。用来生成数据行在结果集中的序号
语法:
ROW_NUMBER( ) OVER ([] )

可以利用ROW_NUMBER函数非常便利的实现分页功能

RANK
排序函数。必须配合over函数,且排序字段值相同的行号一样,同时隐藏行号会占位。
语法:
RANK() OVER ([] )

还可以利用partition进行分组排序,例如对每个班级分别按成绩排序。

DENSE_RANK
紧凑排序函数。与RANK函数不同的是,当排序字段值相同导致行号一样时,同时隐藏行号不占位。
语法:
DENSE_RANK ( ) OVER ([] )
NTILE
分区排序函数。NTILE函数需要一个参数N,这个参数支持bigint。这个函数将结果集等分成N个区,并按排序字段将已排序的记录依次轮流放入各个区内。最后每个区内会从1开始编号,NTILE函数返回这个编号。
语法:
NTILE (integer_expression) OVER ([]< order_by_clause>)

SET ROWCOUNT { number | @number_var }

使 SQL Server 在返回指定的行数之后停止处理查询。 要将此选项设置为 off 以便返回所有的行,请将 SET ROWCOUNT 指定为 0。
SET ROWCOUNT 的设置是在执行时或运行时设置,而不是在分析时设置。

和TOP合用

如果行数值较小,则 SET ROWCOUNT 将覆盖 SELECT 语句 TOP 关键字。

当 INSERT、UPDATE 和 DELETE 语句使用显式 TOP 表达式时,这些语句将忽略 SET ROWCOUNT。这包括 INSERT 后跟 SELECT 子句的语句。

影响范围

设置 SET ROWCOUNT 选项将使大多数 Transact-SQL 语句在受到指定数目的行影响后停止处理。这包括触发器和 INSERT、UPDATE 及 DELETE 等数据修改语句。ROWCOUNT 选项对动态游标无效,但它可以限制键集的行集和不区分游标。应谨慎使用该选项,它主要与 SELECT 语句一起使用。

在 SQL Server 的下一个版本中,使用 SET ROWCOUNT 将不会影响 DELETE、INSERT 和 UPDATE 语句。
对于当前使用 SET ROWCOUNT 的 DELETE、INSERT 和 UPDATE 语句,建议您使用 TOP 语法重写它们。
对于在远程表和本地及远程分区视图上执行的 INSERT、UPDATE 和 DELETE 语句,将忽略 SET ROWCOUNT 选项设置。

select top

在MSSQL2000中是不支持select top + 变量的形式的
在MSSQL2005中却可以,例如:
select top 语句支持变量数目,如下例:

declare @n int
set @n=10
select top(@n) from orders

这样在后台存储过程分页就可以不必用动态语句了。。。