只用在带有 INTO table 子句的 SELECT 语句中,以将标识列插入到新表中。尽管类似,但是 IDENTITY 函数不是与 CREATE TABLE 和 ALTER TABLE 一起使用的 IDENTITY 属性。

解决方案 »

  1.   

    SQL Server 2000不支持这样的修改,你可以先打开事件探查器,然后在企业管理器中手工修改字段的属性为自增类型,SQL Server 2000的处理机制可以在事件探查器中被捕捉。
      

  2.   

    看看ms是怎么干的吧 :)BEGIN TRANSACTION
    SET QUOTED_IDENTIFIER ON
    SET ARITHABORT ON
    SET NUMERIC_ROUNDABORT OFF
    SET CONCAT_NULL_YIELDS_NULL ON
    SET ANSI_NULLS ON
    SET ANSI_PADDING ON
    SET ANSI_WARNINGS ON
    COMMIT
    BEGIN TRANSACTION
    CREATE TABLE dbo.Tmp_MyCustomers
    (
    CustID int NOT NULL IDENTITY (100, 2),
    CompanyName nvarchar(50) NULL
    )  ON [PRIMARY]
    GO
    SET IDENTITY_INSERT dbo.Tmp_MyCustomers ON
    GO
    IF EXISTS(SELECT * FROM dbo.MyCustomers)
     EXEC('INSERT INTO dbo.Tmp_MyCustomers (CustID, CompanyName)
    SELECT CustID, CompanyName FROM dbo.MyCustomers (HOLDLOCK TABLOCKX)')
    GO
    SET IDENTITY_INSERT dbo.Tmp_MyCustomers OFF
    GO
    DROP TABLE dbo.MyCustomers
    GO
    EXECUTE sp_rename N'dbo.Tmp_MyCustomers', N'MyCustomers', 'OBJECT'
    GO
    ALTER TABLE dbo.MyCustomers ADD CONSTRAINT
    PK__MyCustomers__4316F928 PRIMARY KEY CLUSTERED 
    (
    CustID
    ) ON [PRIMARY]GO
      

  3.   

    DEFAULT是指定列默认值的关键字。DEFAULT 定义可用于为表中现有行的新列提供值。DEFAULT 定义不能添加到具有 timestamp 数据类型、IDENTITY 属性、现有 DEFAULT 定义或绑定默认值的列。如果列已有默认值,必须除去旧默认值后才能添加新默认值。为同 SQL Server 先前版本保持兼容性,向 DEFAULT 赋予约束名是可能的。IDENTITY指定新列是标识列。在表中添加新行时,SQL Server 为列提供一个唯一的增量值。标识列通常与 PRIMARY KEY 约束一起用作表的唯一行标识符。IDENTITY 属性可赋予 tinyint、smallint、int、bigint、decimal(p,0) 或者 numeric(p,0) 列。对于每个表只能创建一个标识列。DEFAULT 关键字和绑定默认值不能用于标识列。要么种子和增量都同时指定,要么都不指定。如果二者都未指定,则取默认值 (1,1)。 
      

  4.   

    联机alter table 里有使用IDENTITY 格式说明
      

  5.   

    联机alter table 里有使用IDENTITY 格式说明
    ----------------------------------------------------------------------------------------------
    确实有,但是属于< column_definition > 部分,该部分只在表中新增列的时候才允许使用。
      

  6.   

    恩,我也在考虑这个问题,如果允许这个格式语句,对于已经存在的列,执行完以后按照设计想法就是seed 与Increment 重算了,从应用角度考虑只有存储过程才可以达到这个效果,我想即便你找到MS他也不会承认这是BUG了吧?
      

  7.   

    还是说明这是SQL SERVER的BUG了?SAMPLE代码中写的可以修改。应该是SAMPLE代码的错误吧。
    如果这样,我现在遇到问题。
    我要导数据,做的SSIS包程序来导
    源数据的ID字段是自增的,这个可以不管。
    目标表的ID字段也是自增的。
    但是我需要把源数据的ID原原本本的放在目标表的ID字段里。就是说源数据是什么,目标表中的就是什么,必须严格的保证数据的完整性。不能有任何错误。
    我在SSIS的包中添加了
    SET IDENTITY_INSERT dbo.PU_Account ON
    然后再执行数据导入的数据流步骤。
    但是无任何效果。源数据的ID没有导到目标表中。目标表中的ID还是一样自增
    郁闷死我了。
    所以我只能是去修改自增字段来停止自增。
    道具导完再恢复自增。。只能这样。
    谁有办法可以实现呢?或者给出思路。THX。所有操作需要在SSIS中实现。
      

  8.   

    关注,大家看看吧,我回家吃饭睡觉,收藏先,SSIS我还没用我一直DTS ,哪天我也更新到2005
      

  9.   

    还是说明这是SQL SERVER的BUG了?SAMPLE代码中写的可以修改。应该是SAMPLE代码的错误吧。
    ----------------------------------------------------------------------------------
    哪里提供的SAMPLE代码?
      

  10.   

    SQL SERVER的HELP中提供的SAMPLE代码。
    我问题中贴的就是SQL SERVER HELP中的SAMPLE代码