IDENTITY(属性)
在表中创建一个标识列。该属性与 CREATE TABLE 及 ALTER TABLE Transact-SQL 语句一起使用。说明  IDENTITY 属性与 SQL-DMO Identity 属性不同,后者表现列的行标识属性。 
语法
IDENTITY [ ( seed , increment ) ]参数
seed装载到表中的第一个行所使用的值。increment增量值,该值被添加到前一个已装载的行的标识值上。必须同时指定种子和增量,或者二者都不指定。如果二者都未指定,则取默认值 (1,1)。注释
如果在经常进行删除操作的表中存在着标识列,那么在标识值之间可能会产生差距。如果这构成了问题,那么请不要使用 IDENTITY 属性。但是,为了确保未产生差距,或者为了弥补现有的差距,在用 SET IDENTITY_INSERT ON 显式地输入标识值之前,请先对现有的标识值进行计算。如果重新使用已删除的标识值,那么请使用示例 B 中的示例代码进行检查,以获得下一个可用的标识值。请用您的表名、标识列数据类型以及(该数据类型的)最大可允许值的数值 –1 替换 tablename、column_type 和 max(column_type) – 1。使用 DBCC CHECKIDENT 检查当前的标识值,并将其与标识列中的最大值进行比较。 当将 IDENTITY 属性与 CREATE TABLE 一起使用时,Microsoft® SQL Server™ 使用 CREATE TABLE 的 NOT FOR REPLICATION 选项替代标识列的自动增加。通常,SQL Server 给插入表中的每个新行指派一个值,该值比前面的最高值要大出某些增量。但是,如果新行是由另一个数据源复制过来的,那么标识值必须保持与其在数据源中完全相同。示例
A. 将 IDENTITY 属性与 CREATE TABLE 一起使用
下面的示例创建一个新表,该表将 IDENTITY 属性用于获得自动增加的标识号。USE pubs
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
      WHERE TABLE_NAME = 'new_employees')
   DROP TABLE new_employees
GO
CREATE TABLE new_employees
(
 id_num int IDENTITY(1,1),
 fname varchar (20),
 minit char(1),
 lname varchar(30)
)INSERT new_employees
   (fname, minit, lname)
VALUES
   ('Karin', 'F', 'Josephs')INSERT new_employees
   (fname, minit, lname)
VALUES
   ('Pirkko', 'O', 'Koskitalo')

解决方案 »

  1.   

    sqlserver 没有BEFORE触发  有一个INSTEAD OF 替换触发器
      

  2.   

    我用的是sql server2000,
    如何实现?
    pengdali(大力 V2.0)
    我的意思是用触发器来实现指定的格式的id号,比如2003060001 前面的是年月,后面的四位是流水号。
      

  3.   

    不用触发器:写一个函数,放在默认值里:
    create function getNumber()
    returns char(5)
    as
    return (select right('00000'+cast(isnull(max(字段),0)+1 as varchar(5)),5) from 表)
    go你在你的表里的那个字段的默认值里写:
    dbo.getNumber()
    ------------------------------

    默认值里的dbo和()不要漏写了,函数你只要把中文的部分改成你的表名和列名就OK了
      

  4.   

    SQL SERVER中没有before 触发,但可通过inserted表的内容实现类似功能大力说的没错,把你的列id设为 indentity(1,1) 自增长1就可以满足的要求,不可人工对该列赋值