These Scripts change the table structure of any tables within the Database that do not have a Primary Key Column, and do not have a Unique column that can become a Primary Key.
Script 1 - Adds a Unique Column called RowID to all Tables in a Database without a Primary Key.
USE [Database Name]
GO
DECLARE
@TableName  VARCHAR(128)
DECLARE
@SchemaName VARCHAR(128)
DECLARE @SQL          VARCHAR(1000)
CREATE TABLE #tableList
      (
       SchemaName VARCHAR(128)
      ,TableName  VARCHAR(128)
      ,PrimaryKey BIT
      );
INSERT INTO #tableList
      SELECT
SCHEMA_NAME(SCHEMA_ID) AS SchemaName
            ,name
AS TableName
            ,0
-- No Primary Key
      FROM
sys.tables
      WHERE
OBJECTPROPERTY(OBJECT_ID,'TableHasPrimaryKey') = 0
      ORDER
BY SchemaName,
TableName
WHILE (SELECT COUNT(*) FROM #tableList WHERE PrimaryKey = 0) > 0
      BEGIN
            SELECT
TOP 1 @TableName =
TableName
                  , @SchemaName =
SchemaName
            FROM
#tableList
            WHERE
PrimaryKey = 0;
                  SET @SQL = 'ALTER TABLE [' +@SchemaName
+ '].[' +@TableName + '] ADD [RowID] INT IDENTITY(1,1)'
                  EXEC (@SQL)
                  IF @@ERROR<>0 PRINT @SQL
            UPDATE
#tableList
            SET
PrimaryKey = 1
            WHERE
TableName = @TableName
            AND
SchemaName = @SchemaName
      END
Script 2 - Makes the RowID Column a Primary Key Column on all tables in the Database with the RowID Column.
USE [Database Name]
GO
DECLARE
@TableName  VARCHAR(128)
DECLARE
@SchemaName VARCHAR(128)
DECLARE @SQL          VARCHAR(1000)
CREATE TABLE #tableList
      (
       SchemaName VARCHAR(128)
      ,TableName  VARCHAR(128)
      ,RowID      BIT
      );
INSERT INTO #tableList
      SELECT
TABLE_SCHEMA AS SchemaName
      ,
TABLE_NAME AS TableName
      ,
0
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
COLUMN_NAME = 'RowID'
ORDER BY SchemaName,
TableName
WHILE (SELECT COUNT(*) FROM #tableList WHERE RowID = 0) > 0
      BEGIN
            SELECT
TOP 1 @TableName =
TableName
                  , @SchemaName =
SchemaName
            FROM
#tableList
            WHERE
RowID = 0;
                  SET @SQL = 'ALTER TABLE [' +@SchemaName
+ '].[' +@TableName + '] ADD CONSTRAINT PK_' +@SchemaName
+ '_' +@TableName + ' PRIMARY KEY NONCLUSTERED (RowID) ON [PRIMARY]'
                  EXEC (@SQL)
                  IF @@ERROR<>0 PRINT @SQL
            UPDATE
#tableList
            SET
RowID = 1
            WHERE
TableName = @TableName
            AND
SchemaName = @SchemaName
      END
DROP TABLE #tableList
NB: AGAIN PLEASE USE THESE SCRIPTS WITH EXTREME CAUTION IN A PRODUCTION ENVIRONMENT!!
 
NB: AGAIN PLEASE USE THESE SCRIPTS WITH EXTREME CAUTION IN A PRODUCTION ENVIRONMENT!!
 
 
No comments:
Post a Comment
Note: only a member of this blog may post a comment.