-------------------------------------------------------------------- Listing 1 -------------------------------------------------------------------- USE master GO IF EXISTS (SELECT * FROM sysobjects WHERE name = 'sp_DeletePrimaryKeys') DROP PROCEDURE dbo.sp_DeletePrimaryKeys GO CREATE PROCEDURE dbo.sp_DeletePrimaryKeys @DBUltra bit = 0, @DBIntra varchar(8000) = NULL, @DBExtra varchar(8000) = NULL, @PCIntra varchar(100) = NULL, @PCExtra varchar(100) = NULL AS SET NOCOUNT ON DECLARE @Return int DECLARE @Retain int DECLARE @Status int SET @Status = 0 DECLARE @TPre varchar(10) DECLARE @TDo3 tinyint DECLARE @TDo4 tinyint SET @TPre = '' SET @TDo3 = LEN(@TPre) SET @TDo4 = LEN(@TPre) + 1 DECLARE @KPre varchar(10) DECLARE @KDo3 tinyint DECLARE @KDo4 tinyint SET @KPre = 'key' SET @KDo3 = LEN(@KPre) SET @KDo4 = LEN(@KPre) + 1 DECLARE @Task varchar(2000) DECLARE @Name varchar(100) DECLARE @Item varchar(100) -- Delete Primary Keys DECLARE Tables CURSOR FAST_FORWARD FOR SELECT T.name, O.name FROM sysobjects AS O JOIN sysobjects AS T ON O.parent_obj = T.id WHERE ISNULL(OBJECTPROPERTY(T.id,'IsMSShipped'),1) = 0 AND O.xtype = 'PK' AND LEFT(T.name,@TDo3) = @TPre AND (@DBIntra IS NULL OR CHARINDEX('|'+SUBSTRING(T.name,@TDo4,100)+'|','|'+(@DBIntra)+'|') > 0) AND (@DBExtra IS NULL OR CHARINDEX('|'+SUBSTRING(T.name,@TDo4,100)+'|','|'+(@DBExtra)+'|') = 0) AND (@PCIntra IS NULL OR SUBSTRING(T.name,@TDo4,100) LIKE @PCIntra) AND (@PCExtra IS NULL OR SUBSTRING(T.name,@TDo4,100) NOT LIKE @PCExtra) ORDER BY T.name, O.name SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain OPEN Tables SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain FETCH NEXT FROM Tables INTO @Name, @Item SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain IF @DBUltra = 0 BEGIN PRINT '-- Delete Primary Keys' PRINT SPACE(0) WHILE @@FETCH_STATUS = 0 AND @Status = 0 BEGIN PRINT 'ALTER TABLE ' + @Name + ' DROP CONSTRAINT ' + @Item FETCH NEXT FROM Tables INTO @Name, @Item SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain END PRINT SPACE(0) END ELSE BEGIN WHILE @@FETCH_STATUS = 0 AND @Status = 0 BEGIN SET @Task = 'ALTER TABLE ' + @Name + ' DROP CONSTRAINT ' + @Item IF @Status = 0 EXECUTE (@Task) SET @Return = @@ERROR IF @Status = 0 SET @Status = @Return FETCH NEXT FROM Tables INTO @Name, @Item SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain END END CLOSE Tables DEALLOCATE Tables SET NOCOUNT OFF RETURN (@Status) GO IF EXISTS (SELECT * FROM sysobjects WHERE name = 'sp_CreatePrimaryKeys') DROP PROCEDURE dbo.sp_CreatePrimaryKeys GO CREATE PROCEDURE dbo.sp_CreatePrimaryKeys @DBUltra bit = 0, @DBIntra varchar(8000) = NULL, @DBExtra varchar(8000) = NULL, @PCIntra varchar(100) = NULL, @PCExtra varchar(100) = NULL, @PCUltra bit = 0 AS SET NOCOUNT ON DECLARE @Return int DECLARE @Retain int DECLARE @Status int SET @Status = 0 DECLARE @TPre varchar(10) DECLARE @TDo3 tinyint DECLARE @TDo4 tinyint SET @TPre = '' SET @TDo3 = LEN(@TPre) SET @TDo4 = LEN(@TPre) + 1 DECLARE @KPre varchar(10) DECLARE @KDo3 tinyint DECLARE @KDo4 tinyint SET @KPre = 'key' SET @KDo3 = LEN(@KPre) SET @KDo4 = LEN(@KPre) + 1 DECLARE @Task varchar(2000) DECLARE @Name varchar(100) DECLARE @Item varchar(100) DECLARE @Wish varchar(40) SET @Wish = CASE WHEN @PCUltra = 0 THEN 'NON' ELSE '' END + 'CLUSTERED' -- Create Primary Keys DECLARE Tables CURSOR FAST_FORWARD FOR SELECT O.name, C.name FROM sysobjects AS O JOIN syscolumns AS C ON O.id = C.id WHERE ISNULL(OBJECTPROPERTY(O.id,'IsMSShipped'),1) = 0 AND RTRIM(O.type) = 'U' AND LEFT(O.name,@TDo3) = @TPre AND O.name NOT LIKE 'adt%' AND O.name NOT LIKE '%dtproper%' AND O.name NOT LIKE 'dt[_]%' AND C.colid = 1 AND (@DBIntra IS NULL OR CHARINDEX('|'+SUBSTRING(O.name,@TDo4,100)+'|','|'+(@DBIntra)+'|') > 0) AND (@DBExtra IS NULL OR CHARINDEX('|'+SUBSTRING(O.name,@TDo4,100)+'|','|'+(@DBExtra)+'|') = 0) AND (@PCIntra IS NULL OR SUBSTRING(O.name,@TDo4,100) LIKE @PCIntra) AND (@PCExtra IS NULL OR SUBSTRING(O.name,@TDo4,100) NOT LIKE @PCExtra) ORDER BY O.name SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain OPEN Tables SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain FETCH NEXT FROM Tables INTO @Name, @Item SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain IF @DBUltra = 0 BEGIN PRINT '-- Create Primary Keys' PRINT SPACE(0) WHILE @@FETCH_STATUS = 0 AND @Status = 0 BEGIN PRINT 'ALTER TABLE ' + @Name + ' ADD CONSTRAINT ' + @KPre + 'PK' + SUBSTRING(@Name,@TDo4,100) + ' PRIMARY KEY ' + @Wish + ' (' + @Item + ')' FETCH NEXT FROM Tables INTO @Name, @Item SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain END PRINT SPACE(0) END ELSE BEGIN WHILE @@FETCH_STATUS = 0 AND @Status = 0 BEGIN SET @Task = 'ALTER TABLE ' + @Name + ' ADD CONSTRAINT ' + @KPre + 'PK' + SUBSTRING(@Name,@TDo4,100) + ' PRIMARY KEY ' + @Wish + ' (' + @Item + ')' IF @Status = 0 EXECUTE (@Task) SET @Return = @@ERROR IF @Status = 0 SET @Status = @Return FETCH NEXT FROM Tables INTO @Name, @Item SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain END END CLOSE Tables DEALLOCATE Tables SET NOCOUNT OFF RETURN (@Status) GO IF EXISTS (SELECT * FROM sysobjects WHERE name = 'sp_DeleteForeignKeys') DROP PROCEDURE dbo.sp_DeleteForeignKeys GO CREATE PROCEDURE dbo.sp_DeleteForeignKeys @DBUltra bit = 0, @DBIntra varchar(8000) = NULL, @DBExtra varchar(8000) = NULL, @PCIntra varchar(100) = NULL, @PCExtra varchar(100) = NULL AS SET NOCOUNT ON DECLARE @Return int DECLARE @Retain int DECLARE @Status int SET @Status = 0 DECLARE @TPre varchar(10) DECLARE @TDo3 tinyint DECLARE @TDo4 tinyint SET @TPre = '' SET @TDo3 = LEN(@TPre) SET @TDo4 = LEN(@TPre) + 1 DECLARE @KPre varchar(10) DECLARE @KDo3 tinyint DECLARE @KDo4 tinyint SET @KPre = 'key' SET @KDo3 = LEN(@KPre) SET @KDo4 = LEN(@KPre) + 1 DECLARE @Task varchar(2000) DECLARE @Name varchar(100) DECLARE @Item varchar(100) -- Delete Foreign Keys DECLARE Tables CURSOR FAST_FORWARD FOR SELECT T.name, O.name FROM sysobjects AS O JOIN sysobjects AS T ON O.parent_obj = T.id WHERE ISNULL(OBJECTPROPERTY(T.id,'IsMSShipped'),1) = 0 AND O.xtype = 'F ' AND LEFT(T.name,@TDo3) = @TPre AND (@DBIntra IS NULL OR CHARINDEX('|'+SUBSTRING(T.name,@TDo4,100)+'|','|'+(@DBIntra)+'|') > 0) AND (@DBExtra IS NULL OR CHARINDEX('|'+SUBSTRING(T.name,@TDo4,100)+'|','|'+(@DBExtra)+'|') = 0) AND (@PCIntra IS NULL OR SUBSTRING(T.name,@TDo4,100) LIKE @PCIntra) AND (@PCExtra IS NULL OR SUBSTRING(T.name,@TDo4,100) NOT LIKE @PCExtra) ORDER BY T.name, O.name SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain OPEN Tables SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain FETCH NEXT FROM Tables INTO @Name, @Item SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain IF @DBUltra = 0 BEGIN PRINT '-- Delete Foreign Keys' PRINT SPACE(0) WHILE @@FETCH_STATUS = 0 AND @Status = 0 BEGIN PRINT 'ALTER TABLE ' + @Name + ' DROP CONSTRAINT ' + @Item FETCH NEXT FROM Tables INTO @Name, @Item SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain END PRINT SPACE(0) END ELSE BEGIN WHILE @@FETCH_STATUS = 0 AND @Status = 0 BEGIN SET @Task = 'ALTER TABLE ' + @Name + ' DROP CONSTRAINT ' + @Item IF @Status = 0 EXECUTE (@Task) SET @Return = @@ERROR IF @Status = 0 SET @Status = @Return FETCH NEXT FROM Tables INTO @Name, @Item SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain END END CLOSE Tables DEALLOCATE Tables SET NOCOUNT OFF RETURN (@Status) GO IF EXISTS (SELECT * FROM sysobjects WHERE name = 'sp_CreateForeignKeys') DROP PROCEDURE dbo.sp_CreateForeignKeys GO CREATE PROCEDURE dbo.sp_CreateForeignKeys @DBUltra bit = 0, @DBIntra varchar(8000) = NULL, @DBExtra varchar(8000) = NULL, @PCIntra varchar(100) = NULL, @PCExtra varchar(100) = NULL AS SET NOCOUNT ON DECLARE @Return int DECLARE @Retain int DECLARE @Status int SET @Status = 0 DECLARE @TPre varchar(10) DECLARE @TDo3 tinyint DECLARE @TDo4 tinyint SET @TPre = '' SET @TDo3 = LEN(@TPre) SET @TDo4 = LEN(@TPre) + 1 DECLARE @KPre varchar(10) DECLARE @KDo3 tinyint DECLARE @KDo4 tinyint SET @KPre = 'key' SET @KDo3 = LEN(@KPre) SET @KDo4 = LEN(@KPre) + 1 DECLARE @Task varchar(2000) DECLARE @Name varchar(100) DECLARE @Item varchar(100) DECLARE @PKey varchar(100) DECLARE @FKey varchar(100) SET @FKey = '*ID' -- Create Foreign Keys DECLARE Tables CURSOR FAST_FORWARD FOR SELECT O.name, C.name, T.name FROM sysobjects AS O JOIN syscolumns AS C ON O.id = C.id JOIN sysobjects AS T ON C.name = REPLACE(@FKey,'*',SUBSTRING(T.name,@TDo4,100)) AND C.colid > 1 WHERE ISNULL(OBJECTPROPERTY(O.id,'IsMSShipped'),1) = 0 AND RTRIM(O.type) = 'U' AND LEFT(O.name,@TDo3) = @TPre AND O.name NOT LIKE 'adt%' AND O.name NOT LIKE '%dtproper%' AND O.name NOT LIKE 'dt[_]%' AND ISNULL(OBJECTPROPERTY(T.id,'IsMSShipped'),1) = 0 AND RTRIM(T.type) = 'U' AND LEFT(T.name,@TDo3) = @TPre AND T.name NOT LIKE 'adt%' AND T.name NOT LIKE '%dtproper%' AND T.name NOT LIKE 'dt[_]%' AND (@DBIntra IS NULL OR CHARINDEX('|'+SUBSTRING(O.name,@TDo4,100)+'|','|'+(@DBIntra)+'|') > 0) AND (@DBExtra IS NULL OR CHARINDEX('|'+SUBSTRING(O.name,@TDo4,100)+'|','|'+(@DBExtra)+'|') = 0) AND (@PCIntra IS NULL OR SUBSTRING(O.name,@TDo4,100) LIKE @PCIntra) AND (@PCExtra IS NULL OR SUBSTRING(O.name,@TDo4,100) NOT LIKE @PCExtra) ORDER BY O.name SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain OPEN Tables SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain FETCH NEXT FROM Tables INTO @Name, @Item, @PKey SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain IF @DBUltra = 0 BEGIN PRINT '-- Create Foreign Keys' PRINT SPACE(0) WHILE @@FETCH_STATUS = 0 AND @Status = 0 BEGIN PRINT 'ALTER TABLE ' + @Name + ' ADD CONSTRAINT ' + @KPre + 'FK' + SUBSTRING(@Name,@TDo4,100) + SUBSTRING(@PKey,@TDo4,100) + ' FOREIGN KEY (' + @Item + ') REFERENCES ' + @PKey + ' (' + @Item + ')' FETCH NEXT FROM Tables INTO @Name, @Item, @PKey SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain END PRINT SPACE(0) END ELSE BEGIN WHILE @@FETCH_STATUS = 0 AND @Status = 0 BEGIN SET @Task = 'ALTER TABLE ' + @Name + ' ADD CONSTRAINT ' + @KPre + 'FK' + SUBSTRING(@Name,@TDo4,100) + SUBSTRING(@PKey,@TDo4,100) + ' FOREIGN KEY (' + @Item + ') REFERENCES ' + @PKey + ' (' + @Item + ')' IF @Status = 0 EXECUTE (@Task) SET @Return = @@ERROR IF @Status = 0 SET @Status = @Return FETCH NEXT FROM Tables INTO @Name, @Item, @PKey SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain END END CLOSE Tables DEALLOCATE Tables SET NOCOUNT OFF RETURN (@Status) GO IF EXISTS (SELECT * FROM sysobjects WHERE name = 'sp_DeleteForeignKeyIndexes') DROP PROCEDURE dbo.sp_DeleteForeignKeyIndexes GO CREATE PROCEDURE dbo.sp_DeleteForeignKeyIndexes @DBUltra bit = 0, @DBIntra varchar(8000) = NULL, @DBExtra varchar(8000) = NULL, @PCIntra varchar(100) = NULL, @PCExtra varchar(100) = NULL AS SET NOCOUNT ON DECLARE @Return int DECLARE @Retain int DECLARE @Status int SET @Status = 0 DECLARE @TPre varchar(10) DECLARE @TDo3 tinyint DECLARE @TDo4 tinyint SET @TPre = '' SET @TDo3 = LEN(@TPre) SET @TDo4 = LEN(@TPre) + 1 DECLARE @IPre varchar(10) DECLARE @IDo3 tinyint DECLARE @IDo4 tinyint SET @IPre = 'idx' SET @IDo3 = LEN(@IPre) SET @IDo4 = LEN(@IPre) + 1 DECLARE @Task varchar(2000) DECLARE @Name varchar(100) DECLARE @Item varchar(100) -- Delete Indexes DECLARE Tables CURSOR FAST_FORWARD FOR SELECT O.name, I.name FROM sysobjects AS O JOIN sysindexes AS I ON O.id = I.id JOIN sysobjects AS T ON I.name = @IPre + SUBSTRING(T.name,@TDo4,100) AND I.indid BETWEEN 2 AND 254 WHERE ISNULL(OBJECTPROPERTY(O.id,'IsMSShipped'),1) = 0 AND RTRIM(O.type) = 'U' AND LEFT(O.name,@TDo3) = @TPre AND O.name NOT LIKE 'adt%' AND O.name NOT LIKE '%dtproper%' AND O.name NOT LIKE 'dt[_]%' AND RTRIM(T.type) = 'U' AND LEFT(T.name,@TDo3) = @TPre AND (@DBIntra IS NULL OR CHARINDEX('|'+SUBSTRING(O.name,@TDo4,100)+'|','|'+(@DBIntra)+'|') > 0) AND (@DBExtra IS NULL OR CHARINDEX('|'+SUBSTRING(O.name,@TDo4,100)+'|','|'+(@DBExtra)+'|') = 0) AND (@PCIntra IS NULL OR SUBSTRING(O.name,@TDo4,100) LIKE @PCIntra) AND (@PCExtra IS NULL OR SUBSTRING(O.name,@TDo4,100) NOT LIKE @PCExtra) ORDER BY O.name, I.name SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain OPEN Tables SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain FETCH NEXT FROM Tables INTO @Name, @Item SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain IF @DBUltra = 0 BEGIN PRINT '-- Delete Indexes' PRINT SPACE(0) WHILE @@FETCH_STATUS = 0 AND @Status = 0 BEGIN PRINT 'DROP INDEX ' + @Name + '.' + @Item FETCH NEXT FROM Tables INTO @Name, @Item SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain END PRINT SPACE(0) END ELSE BEGIN WHILE @@FETCH_STATUS = 0 AND @Status = 0 BEGIN SET @Task = 'DROP INDEX ' + @Name + '.' + @Item IF @Status = 0 EXECUTE (@Task) SET @Return = @@ERROR IF @Status = 0 SET @Status = @Return FETCH NEXT FROM Tables INTO @Name, @Item SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain END END CLOSE Tables DEALLOCATE Tables SET NOCOUNT OFF RETURN (@Status) GO IF EXISTS (SELECT * FROM sysobjects WHERE name = 'sp_CreateForeignKeyIndexes') DROP PROCEDURE dbo.sp_CreateForeignKeyIndexes GO CREATE PROCEDURE dbo.sp_CreateForeignKeyIndexes @DBUltra bit = 0, @DBIntra varchar(8000) = NULL, @DBExtra varchar(8000) = NULL, @PCIntra varchar(100) = NULL, @PCExtra varchar(100) = NULL, @DBAdmin tinyint = NULL AS SET NOCOUNT ON DECLARE @Return int DECLARE @Retain int DECLARE @Status int SET @Status = 0 DECLARE @TPre varchar(10) DECLARE @TDo3 tinyint DECLARE @TDo4 tinyint SET @TPre = '' SET @TDo3 = LEN(@TPre) SET @TDo4 = LEN(@TPre) + 1 DECLARE @IPre varchar(10) DECLARE @IDo3 tinyint DECLARE @IDo4 tinyint SET @IPre = 'idx' SET @IDo3 = LEN(@IPre) SET @IDo4 = LEN(@IPre) + 1 DECLARE @Task varchar(2000) DECLARE @Name varchar(100) DECLARE @Item varchar(100) DECLARE @PKey varchar(100) DECLARE @Wish varchar(20) SET @Wish = CONVERT(varchar(10),ISNULL(@DBAdmin,90)) -- Create Indexes DECLARE Tables CURSOR FAST_FORWARD FOR SELECT O.name, C.name, K.name FROM sysobjects AS O JOIN syscolumns AS C ON O.id = C.id JOIN sysreferences AS R ON O.id = R.fkeyid AND C.colid = R.fkey1 AND C.colid > 1 JOIN sysobjects AS K ON R.rkeyid = K.id WHERE ISNULL(OBJECTPROPERTY(O.id,'IsMSShipped'),1) = 0 AND RTRIM(O.type) = 'U' AND LEFT(O.name,@TDo3) = @TPre AND O.name NOT LIKE 'adt%' AND O.name NOT LIKE '%dtproper%' AND O.name NOT LIKE 'dt[_]%' AND (@DBIntra IS NULL OR CHARINDEX('|'+SUBSTRING(O.name,@TDo4,100)+'|','|'+(@DBIntra)+'|') > 0) AND (@DBExtra IS NULL OR CHARINDEX('|'+SUBSTRING(O.name,@TDo4,100)+'|','|'+(@DBExtra)+'|') = 0) AND (@PCIntra IS NULL OR SUBSTRING(O.name,@TDo4,100) LIKE @PCIntra) AND (@PCExtra IS NULL OR SUBSTRING(O.name,@TDo4,100) NOT LIKE @PCExtra) ORDER BY O.name SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain OPEN Tables SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain FETCH NEXT FROM Tables INTO @Name, @Item, @PKey SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain IF @DBUltra = 0 BEGIN PRINT '-- Create Indexes' PRINT SPACE(0) WHILE @@FETCH_STATUS = 0 AND @Status = 0 BEGIN PRINT 'CREATE INDEX ' + @IPre + SUBSTRING(@PKey,@TDo4,100) + ' ON ' + @Name + ' (' + @Item + ') WITH FILLFACTOR = ' + @Wish FETCH NEXT FROM Tables INTO @Name, @Item, @PKey SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain END PRINT SPACE(0) END ELSE BEGIN WHILE @@FETCH_STATUS = 0 AND @Status = 0 BEGIN SET @Task = 'CREATE INDEX ' + @IPre + SUBSTRING(@PKey,@TDo4,100) + ' ON ' + @Name + ' (' + @Item + ') WITH FILLFACTOR = ' + @Wish IF @Status = 0 EXECUTE (@Task) SET @Return = @@ERROR IF @Status = 0 SET @Status = @Return FETCH NEXT FROM Tables INTO @Name, @Item, @PKey SET @Retain = @@ERROR IF @Status = 0 SET @Status = @Retain END END CLOSE Tables DEALLOCATE Tables SET NOCOUNT OFF RETURN (@Status) GO --------------------------------------------------------------------