Generic Cialis

SQL Server使用时两个常见的错误

一、ISNULL()的正确用法

语法
ISNULL ( check_expression , replacement_value )

备注:
如果 check_expression 不为 NULL,则返回它的值;否则,在将 replacement_value 隐式转换为 check_expression 的类型(如果这两个类型不同)后,则返回前者。

参数:
check_expression 将被检查是否为 NULL 的表达式。check_expression 可以为任何类型。

replacement_value 当 check_expression 为 NULL 时要返回的表达式。replacement_value 必须是可以隐式转换为 check_expresssion 类型的类型。

返回类型:
返回与 check_expression 相同的类型。

注意:
在将 replacement_value 隐式转换为 check_expression 的类型(如果这两个类型不同),不光是类型的转换,还有长度的转换,返回check_expression的长度。如果replacement_value长度长于check_expression,则会自动截断,只返回check_expression长度的内容。
这种情况,如果想保留后者的长度,就要强制转换前者的长度。

二、数据类型的长度
在数据库中有几类数据类型是定长的,即长度不足时补空格。

char 固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符
nchar 固定长度的 Unicode 数据,最大长度为 4,000 个字符
binary 固定长度的二进制数据,其最大长度为 8,000 个字节

在使用时请大家注意以上数据类型。

下面是SQL中数据类型的说明。

精确数字

整数
bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。
int 从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。
smallint 从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整数数据。
tinyint 从 0 到 255 的整数数据。
bit 1 或 0 的整数数据。

decimal 和 numeric
decimal 从 -10^38 +1 到 10^38 –1 的固定精度和小数位的数字数据。
numeric 功能上等同于 decimal。

money 和 smallmoney
money 货币数据值介于 -2^63 (-922,337,203,685,477.5808) 与 2^63 -1 (+922,337,203,685,477.5807)之间,精确到货币单位的千分之十。
smallmoney 货币数据值介于 -214,748.3648 与 +214,748.3647 之间,精确到货币单位的千分之十。

近似数字
float 从 -1.79E + 308 到 1.79E + 308 的浮点精度数字。
real 从 -3.40E + 38 到 3.40E + 38 的浮点精度数字。

datetime 和 smalldatetime
datetime 从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间数据,精确到百分之三秒(或 3.33毫秒)。
smalldatetime 从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间数据,精确到分钟。

字符串
char 固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。
varchar 可变长度的非 Unicode 数据,最长为 8,000 个字符。
text 可变长度的非 Unicode 数据,最大长度为 2^31 - 1 (2,147,483,647) 个字符。

Unicode 字符串
nchar 固定长度的 Unicode 数据,最大长度为 4,000 个字符。
nvarchar 可变长度 Unicode 数据,其最大长度为 4,000 字符。sysname 是系统提供用户定义的数据类型,在功能上等同于 nvarchar(128),用于引用数据库对象名。
ntext 可变长度 Unicode 数据,其最大长度为 2^30 - 1 (1,073,741,823) 个字符。

二进制字符串
binary 固定长度的二进制数据,其最大长度为 8,000 个字节。
varbinary 可变长度的二进制数据,其最大长度为 8,000 个字节。
image 可变长度的二进制数据,其最大长度为 2^31 - 1 (2,147,483,647) 个字节。

其它数据类型
cursor 游标的引用。
sql_variant
一种存储 SQL Server 支持的各种数据类型(text、ntext、timestamp 和 sql_variant 除外)值的数据类型。
table
一种特殊的数据类型,存储供以后处理的结果集。
timestamp
数据库范围的唯一数字,每次更新行时也进行更新。
uniqueidentifier
全局唯一标识符 (GUID)。

This entry was posted on 星期二, 七月 1st, 2008 at 18:31 and is filed under DatabaseTech. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

1 条点评 针对这篇 “SQL Server使用时两个常见的错误”

  1. wise_sandy Says:

    ISNULL()函数可以用 coalesce()函数来替换,但coalesce()函数也有一些限制。

添加点评