2011-06-30 53 views
4

我補種標識列是這樣的:補種SQL服務器標識列

EXEC sp_MSforeachtable "DBCC CHECKIDENT ('?', RESEED, 0)" 

查詢扔下我一個錯誤,如果有表中沒有身份。但是我仍然需要爲數據庫中所有具有身份的表格重新設置身份。 (如果沒有身份證明,請不要拋出錯誤)

回答

6

所有表格是否真的是空的?

DECLARE @sql NVARCHAR(MAX) = N''; 

SELECT @sql = @sql + N'DBCC CHECKIDENT(''' 
    + QUOTENAME(OBJECT_SCHEMA_NAME([object_id])) 
    + '.' + QUOTENAME(OBJECT_NAME([object_id])) 
    + ''', RESEED, 0);' + CHAR(13) + CHAR(10) 
    FROM sys.columns 
    WHERE is_identity = 1; 

PRINT @sql; 
-- EXEC sp_executesql @sql; 
+0

太好了。謝謝! – user194076

+0

此代碼在具有計算列的表上使用它們時會拋出錯誤「DELETE失敗,因爲以下SET選項具有不正確的設置:'QUOTED_IDENTIFIER'」。任何想法如何改變上面的腳本,使其使用計算列(也顯然發生在索引視圖,篩選索引,查詢通知,空間索引操作和XML數據類型方法)? – Marchy

+0

@Marchy,當你創建這些表時,你有'SET QUOTED_IDENTIFIER OFF'嗎?您是否嘗試在腳本的開始處添加SET QUOTED_IDENTIFIER ON;(在'DECLARE'應該沒問題之前)? –

0

補種所有表,在一個線路上有一個標識列0:

exec sp_MSforeachtable 'dbcc checkident(''?'', reseed, 0)', @whereand='and exists(select 1 from sys.columns c where c.object_id = o.id and is_identity = 1)' 

檢查標識信息:當前標識值 '33798',當前列值 '0'。 DBCC執行完成。如果DBCC打印錯誤消息,請聯繫您的系統管理員。 檢查身份信息:當前身份值'3359',當前列值'0'。 DBCC執行完成。如果DBCC打印錯誤消息,請聯繫您的系統管理員。