开始学习SQL Server2005数据库,从T-SQL语言入手,这几天一直在看《Microsoft SQL Server 2005 T-SQL & .NET 高级编程》。以下是笔记。
字符串类型:
char
varchar
varchar(max)
text
Unicode字符串型(容纳Unicode字符,每个字符占两个字节)
nchar
nvarchar
nvarchar(max)
ntext
日期和时间型
datetime:占8个字节,精度为3.33毫秒,覆盖日期:1753.1.1-9999.12.31
smalldatetime:占4字节,精度为1分钟,覆盖日期:1900.1.1-2079.6.6
整形
int:4字节(-2G~2G-1)
smallint:2字节(-32k~32k-1)
tinyint:1字节(0~255)
bigint:8字节
bit:1位(0或1)
近似数值型(精度表示有效数字位数,标度表示小数点右边的数字位数)
real:精度最大为7
float:精度最大为15
精确数值型
decimal:精度最大为38
numeric
货币型(是decimal数和小规模的real数的精度之间的折衷)
money:8字节,存储结构和bigint相同
smallmoney:4字节,标度最大为4,存储结构和int相同
可以再货币常量前面加上$或其他18种货币符号之一。
二进制型(用来存储比特位的字符串)
binary
varbinary
varbinary(max)
image
OPENROWSET()函数,它的BULKOLEDB提供者可以读取文件,并将文件作为一个行集加载到varbinary(max)列中。
特殊类型
timestamp:用来表示记录版本号的二进制值。
uniqueidentifier:16个字节的二进制值,这个值称为全局唯一标识符(globally unique identifier, GUID),GUID用NEWID函数生成。
xml:
sql_variant:允许单个变量、列和参数以不同的数据类型存储值。
在内部,变量实体对象会记录两个值:1、实际值;2、描述变体的元数据:基本数据类型、最大长度、标度、精度和调整
可以存储以下类型以外的任何数据类型:text、ntext、image、varchar(max)、nvarchar(max)、varbinary(max)、timestamp、sql_variant、任何用户自定义数据类型。
用法上有较多的限制。
table:存储记录集
游标数据类型:
用户自定义类型:(用户自定义数据类型吸引人的一个方面是:在数据库中通过一个步骤就可以修改它们)
exec sp_addtype Phone,varchar(20),'not null'
新数据类型可以基于除了timestamp之外的任何系统定义类型。
3.4 变量
3.4.1 局部变量
局部变量的作用域是一个批处理
1、变量声明
declare @LastName varchar(50),
@FirstName varchar(30);
基于用户自定义的数据类型定义变量:
exec sp_addtype phone,int,‘not null’;
declare @OfficePhone phone;
2、用Select语句赋值
Select @LastName = 'Smith';
3、用Set语句赋值
Set @LastName = 'Johnson';
用Set语句更可取,因为它使代码更可读,而且减少了出错的机率(同时给一个变量赋值并返回结果集)。
用Set语句只有一个问题,不能用一个语句赋多个值。
4、在Update语句中赋值(这个语句用来解决需要同时读取和更新一列时的并发问题)
Update Inventory
Set @mnsCost = Cost = Cost *fltTaxRate
where Inventory = @intInventoryId;
5、显示变量的值
可以通过Select语句或Print语句显示给用户
Select @LastName;
Print @FirstName;
在返回给用户的结果集中可以包括一个局部变量:
Select make “Selected make”
Model “Selected Model”
@Model “Original model”
from Equipment
where EqId = 2;
3.4.2 全局变量
全局变量构成一种特殊的变量类型,它们中的值由服务器负责维护。全局变量名称面前要加前缀@@。
1、@@identity
每个表有一列可以定义为Identity列,服务器会自动在这一列中产生一个唯一值。
只插入一个记录,并向调用者返回这个记录的新键。
2、@@error
在每个T-SQL语句后面,服务器会将该变量的值设置为一个整数值:
0:如果语句失败。
错误号:如果语句失败。
3、@@rowcount
在每个T-SQL语句后面,服务器将这个变量的值设置为受它影响的记录的总数。它用于验证选中的操作是否成功
有些语句(像if语句)会将@@rowcount设置为0,而有些语句(像declare语句)不会影响它。
更新单个记录时,如果where子句指定了一个没有限定任何记录的条件,则SQL Server不会报错,若SQL Server不会更新任何内容,你可能认为操作已经成功,可以用@@rowcount来识别这种情况。
笔记对应的代码: