Fix all identities on the SQL Server or just fix 'em in one database.
IF EXISTS (SELECT * FROM sysobjects
WHERE id = OBJECT_ID('dbo.check_ident')
AND sysstat & 0xf = 4)
DROP PROCEDURE dbo.check_ident
GO
CREATE PROCEDURE check_ident
@dbName VARCHAR(30) = ' ',
@saPassword VARCHAR(20) = ' ',
@debug VARCHAR(5) = 'false'
AS
DECLARE @dbid INT,
@lastdbid INT,
@CMD VARCHAR(255),
@CMDstatus INT,
@myName VARCHAR(20)
SET NOCOUNT ON
SELECT @myName = 'check_ident'
SELECT @saPassword = ' '
IF @dbName = ' ' -- do em all
BEGIN
SELECT @dbid = 1
SELECT @lastdbid = 5 -- skip the system dbs
END
ELSE
SELECT @dbid = DB_ID(@dbName)
WHILE @dbid IS NOT NULL
BEGIN
IF @dbName IS NULL -- do em all
SELECT @dbid = (SELECT MIN(dbid) FROM master..sysdatabases
WHERE dbid > @lastdbid)
EXEC hold_semaphore 'textreader'
TRUNCATE TABLE textreader
SELECT count(*) FROM textreader WHERE 1=2
INSERT textreader
VALUES("USE " + DB_NAME(@dbid))
INSERT textreader
SELECT line
FROM scripts
WHERE name = 'fix_all_ident'
ORDER BY ID
SELECT @CMD = 'bcp admin..textreader out ' +
'C:\fix_' + DB_NAME(@dbid) + '_ident.sql -c -Usa -P' +
@saPassword + ' -S' + @@SERVERNAME
EXEC @CMDstatus = dispatch @CMD, @myName, @debug
IF (@CMDstatus <> 0) return @CMDstatus
TRUNCATE TABLE textreader
EXEC release_semaphore 'textreader'
SELECT @CMD = 'isql -Usa -P' + @saPassword + ' -S' + @@SERVERNAME +
' -dmaster -i"C:\fix_' + DB_NAME(@dbid) + '_ident.sql"' +
' -o C:\\fix_' + DB_NAME(@dbid) + '_ident.out -n'
EXEC @CMDstatus = dispatch @CMD, @myName, @debug
IF (@CMDstatus <> 0) return @CMDstatus
IF @dbName IS NULL
SELECT @lastdbid = @dbid
ELSE
SELECT @dbid = NULL
END
GO