两个问题:
1. 在MS SQL SERVER 中 怎样才能自定义一种类型,比如长度为三的数字?
2. 单号自增长的问题, 比如 表结构 A_Table( id , AParam(char(2)), ASerialNO(char(10))
其中ASerialNO是自增长单号,其组成为前面两位是 AParam,后面为流水号,在数据库后台怎样让其
自动生成?
1:
sp_addtype
创建用户定义的数据类型。
语法
sp_addtype [ @typename = ] type,
[ @phystype = ] system_data_type
[ , [ @nulltype = ] null_type ]
[ , [ @owner = ] owner_name ]
参数
[@typename =] type
用户定义的数据类型的名称。数据类型名称必须遵照标识符的规则,而且在每个数据库中必须是唯一的。type 的数据类型为 sysname,没有默认值。
[@phystype =] system_data_type
是用户定义的数据类型所基于的物理数据类型或 Microsoft® SQL Server™ 提供的数据类型。system_data_type 的数据类型是 sysname,没有默认值,可能是这些值之一:
binary( n ) image smalldatetime
Bit int smallint
char( n ) nchar( n ) text
Datetime ntext tinyint
Decimal numeric uniqueidentifier
decimal[ ( p [, s ] ) ] numeric[ ( p [ , s ] ) ] varbinary( n )
Float nvarchar( n ) varchar( n )
float( n ) real
如果参数中嵌入有空格或标点符号,则必须用引号将该参数引起来。有关可用的数据类型的更多信息,请参见数据类型。
n
非负整数,指明所选数据类型的长度。
p
非负整数,指明可保留的最大十进制位数,包括小数点左边和右边的数字。有关更多信息,请参见 decimal 和 numeric。
s
非负整数,指明小数点右边的小数数字可保留的最大十进制位数,它必须小于或等于精度值。有关更多信息,请参见本卷中的"decimal 和 numeric"。
[@nulltype =] null_type
指明用户定义的数据类型处理空值的方式。null_type 的数据类型为 varchar(8),默认值为 NULL,并且必须用单引号引起来。如果没有用 sp_addtype 显式定义 null_type,则将其设置为当前默认的为空性。使用 GETANSINULL 系统函数可确定当前默认的为空性,可以使用 SET 语句或 sp_dboption 对该为空性进行调整。应显式定义为空性。
说明 null_type 参数只为该数据类型定义默认的为空性。如果在创建表的过程中使用用户定义的数据类型时显式地定义了为空性,那么该为空性优先于已定义好的为空性。有关更多信息,请参见 ALTER TABLE 和 CREATE TABLE。
[@owner =] owner_name
指定新数据类型的创建者或所有者。owner_name 的数据类型为 sysname。当没有指定时,owner_name 为当前用户。
返回代码值
0或 1
结果集
无
注释
用户定义的数据类型名称在数据库中必须是唯一的,但是名称不同的用户定义的数据类型可以有相同的定义。
除非将 master 作为当前数据库来执行 sp_addtype,否则,执行 sp_addtype 会创建用户定义的数据类型,并且将其添加到某个特定数据库的 systypes 系统表中。如果想在所有新的用户定义的数据库中都可以使用这一用户定义的数据类型,请将其添加到 model。在创建了用户数据类型之后,可以在 CREATE TABLE 或 ALTER TABLE 中使用它,也可以将默认值和规则绑定到用户定义的数据类型。
不能使用 SQL Server timestamp 数据类型来定义用户定义的数据类型。
权限
执行权限默认授予 public 角色。
示例
A. 创建不允许空值的用户定义数据类型
下面的示例创建一个名为 ssn的用户定义数据类型,它基于 SQL Server 提供的 varchar 数据类型。ssn 数据类型用于那些保存 11 位数字的社会保险号 (999-99-9999) 的列。该列不能为 NULL。
请注意,varchar(11) 由单引号引了起来,这是因为它包含了标点符号。
USE master
EXEC sp_addtype ssn, VARCHAR(11), NOT NULL
B. 创建允许空值的用户定义数据类型
下面的示例创建了一个名为 birthday 的用户定义数据类型,该数据类型允许空值。
USE master
EXEC sp_addtype birthday, datetime, NULL
C. 创建另外的用户定义的数据类型
下面的示例为国内及国际电话和传真号码另外创建两个用户定义的数据类型 telephone 和 fax。
USE master
EXEC sp_addtype telephone, varchar(24), NOT NULL
EXEC sp_addtype fax, varchar(24), NULL
--例子:
create table A_Table(id int identity(1,1),AParam char(2)
,ASerialNO as AParam+right(00000000+cast(id as varchar),8))
go
--插入数据测试
insert into A_Table(AParam)
select aa
union all select bb
--显示结果
select * from A_Table
go
--删除测试
drop table A_Table
/*--测试结果
id AParam ASerialNO
----------- ------ ------------------
1 aa aa00000001
2 bb bb00000002
--*/