西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁西西教程數(shù)據(jù)庫教程 → sql Server 中復位 IDENTITY 標識

sql Server 中復位 IDENTITY 標識

相關軟件相關文章發(fā)表評論 來源:百度搜索時間:2011/11/2 17:26:15字體大小:A-A+

作者:西西點擊:529次評論:2次標簽: sql

sql數(shù)據(jù)庫轉換器Withdata SqlToTxtv4.0 Release 1 Build 190719 官方版
  • 類型:數(shù)據(jù)庫類大。8.0M語言:中文 評分:10.0
  • 標簽:
立即下載

IDENTITY(標識)列,也有很多人稱之為自增列,在SQL Server 2000中,標識列通過IDENTITY來定義,下面是與獲取最后插入記錄的標識值有關的函數(shù)的一個示例說明

SQL Server 中,可以使用 SCOPE_IDENTITY()、 @@IDENTITY 、 IDENT_CURRENT() 來取得最后插入記錄的值值,它們的區(qū)別在于:
SCOPE_IDENTITY() 返回插入到同一作用域中的 IDENTITY 列內(nèi)的最后一個 IDENTITY 值。一個作用域就是一個模塊——存儲過程、觸發(fā)器、函數(shù)或批處理。因此,如果兩個語句處于同一個存儲過程、函數(shù)或批處理中,則它們位于相同的作用域中。
@@IDENTITY 返回在當前會話的所有表中生成的最后一個標識值
IDENT_CURRENT() 返回為任何會話和任何作用域中的指定表最后生成的標識值

當一個表中的記錄刪除后如果再新加,SQL會在原來的 IDENTITY 基礎上增加.我們可以用下面的命令來復位

DBCC CHECKIDENT(表名,RESEED,0)

下面是從一個朋友的Blog上傳過來的.清空整個數(shù)據(jù)庫的SQL語句

SET NoCount ON
   DECLARE @tableName varchar(512)
   Declare @SQL varchar(2048)
   SET @tableName=''
   WHILE EXISTS
   (   
   --Find all child tables and those which have no relations
   SELECT T.table_name   FROM INFORMATION_SCHEMA.TABLES T
          LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC    ON T.table_name = TC.table_name
     WHERE ( TC.constraint_Type = 'Foreign Key' OR TC.constraint_Type IS NULL )
         AND T.table_name NOT IN ( 'dtproperties', 'sysconstraints', 'syssegments' )
         AND Table_type = 'BASE TABLE'
         AND T.table_name > @TableName
         )
    Begin
        SELECT @tableName = min(T.table_name)    FROM INFORMATION_SCHEMA.TABLES T
        LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC    ON T.table_name=TC.table_name
           WHERE ( TC.constraint_Type = 'Foreign Key' OR TC.constraint_Type IS NULL )
         AND T.table_name NOT IN ( 'dtproperties', 'sysconstraints', 'syssegments' )
         AND Table_type = 'BASE TABLE'
         AND T.table_name > @TableName
         --Truncate the table
         SET @SQL = 'Truncate table '+ @TableName 
         print (@SQL)
         Exec(@SQL)
     End
  
   SET @TableName=''
   WHILE EXISTS
   ( 
   --Find all Parent tables
     SELECT T.table_name     FROM INFORMATION_SCHEMA.TABLES T
     LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC     ON T.table_name = TC.table_name
     WHERE TC.constraint_Type = 'Primary Key'
     AND T.table_name <> 'dtproperties'
     AND Table_type='BASE TABLE'
     AND T.table_name > @TableName
     )
   Begin
     SELECT @tableName = min(T.table_name)   FROM INFORMATION_SCHEMA.TABLES T
          LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC   ON T.table_name=TC.table_name
     WHERE TC.constraint_Type = 'Primary Key'
     AND T.table_name <> 'dtproperties'
     AND Table_type = 'BASE TABLE'
     AND T.table_name > @TableName
     --Delete the table
    
        SET @SQL = ' delete from '+ @TableName 
         print (@SQL)
         Exec(@SQL)
     --Reset identity column
         IF EXISTS ( SELECT *   FROM INFORMATION_SCHEMA.COLUMNS
             WHERE COLUMNPROPERTY(
             OBJECT_ID( QUOTENAME(table_schema)+ '.' + QUOTENAME(@tableName) ),
             column_name,'IsIdentity'
             ) = 1
           )

     DBCC CHECKIDENT(@tableName,RESEED,0)
   End
   SET NoCount OFF

1、先找出沒有外鍵約束的表,truncate
2、有外鍵的表,先delete,再復位identity列
于是得出,
語句。ㄗ⒁鉀]有使用游標)

    相關評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    第 1 樓 河南洛陽聯(lián)通ADSL 網(wǎng)友 客人 發(fā)表于: 2012/6/17 14:10:28
    學到知識了,感謝樓主.

    支持( 0 ) 蓋樓(回復)

    發(fā)表評論 查看所有評論(2)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)