Saturday, 19 July 2014



--Just copy and paste the following script in SQL Server Query Analyser and modify database name from 1st line.


USE [DATABASE_NAME] -- Put your database Name here before execute
Go
-- Don't Modify any portion from here if you don't understand the coding.
IF EXISTS(SELECT * FROM sys.objects WHERE type_desc LIKE '%FUNCTION%' AND name='TableScript') BEGIN
      DROP FUNCTION [dbo].[TableScript]
END
GO

CREATE FUNCTION [dbo].[TableScript]
      (@TableName VARCHAR(max)=null) RETURNS @sql table(s varchar(1000), id int identity)
AS
BEGIN
DECLARE @table VARCHAR(100)
SET @table = @TableName -- set table name here
-- create statement
INSERT INTO  @sql(s) VALUES ('create table [' + @table + '] (')

-- column list
INSERT INTO @sql(s)
SELECT
    '  ['+column_name+'] ' +
    data_type + COALESCE('('+CAST(character_maximum_length AS VARCHAR)+')','') + ' ' +
    CASE WHEN EXISTS (
        SELECT id FROM syscolumns
        WHERE object_name(id)=@table
        and name=column_name
        and columnproperty(id,name,'IsIdentity') = 1
    ) THEN
        'IDENTITY(' +
        CAST(ident_seed(@table) AS VARCHAR) + ',' +
        CAST(ident_incr(@table) AS VARCHAR) + ')'
    ELSE ''
    END + ' ' +
    ( CASE WHEN IS_NULLABLE = 'No' THEN 'NOT ' ELSE '' END ) + 'NULL ' +
    COALESCE('DEFAULT '+COLUMN_DEFAULT,'') + ','

 FROM information_schema.columns WHERE table_name = @table
 ORDER BY ordinal_position

-- primary key
DECLARE @pkname VARCHAR(100)
SELECT @pkname = constraint_name FROM information_schema.table_constraints
WHERE table_name = @table and constraint_type='PRIMARY KEY'
IF ( @pkname is not null ) BEGIN
    INSERT INTO @sql(s) VALUES('  PRIMARY KEY (')
    INSERT INTO @sql(s)
        SELECT '   ['+COLUMN_NAME+'],' FROM information_schema.key_column_usage
        WHERE constraint_name = @pkname
        ORDER BY ordinal_position
    -- remove trailing comma
    UPDATE @sql SET s=left(s,len(s)-1) WHERE id=@@identity
    INSERT INTO @sql(s) values ('  )')
END
ELSE BEGIN
    -- remove trailing comma
    UPDATE @sql SET s=left(s,len(s)-1) WHERE id=@@identity
END
-- closing bracket
INSERT INTO @sql(s) VALUES( ')' )
-- result!
RETURN
END
GO

IF EXISTS(SELECT * FROM sys.objects WHERE type_desc LIKE '%FUNCTION%' AND name='RelationScript') BEGIN
      DROP FUNCTION [dbo].[RelationScript]
END
GO

CREATE FUNCTION [dbo].[RelationScript]
      (@TableName varchar(max)=null) RETURNS @sql table(s varchar(1000))
AS
BEGIN
DECLARE @fkname VARCHAR(100)
SELECT @fkname = constraint_name FROM information_schema.table_constraints
WHERE table_name = @TableName and constraint_type='FOREIGN KEY'
IF ( @fkname is not null ) BEGIN
      DECLARE @TempTable TABLE (ForeignKey VARCHAR(100),TableName VARCHAR(100),ColumnName VARCHAR(100),ReferenceTableName VARCHAR(100),ReferenceColumnName VARCHAR(100))
      INSERT INTO @TempTable
      SELECT f.name AS ForeignKey,OBJECT_NAME(f.parent_object_id) AS TableName,COL_NAME(fc.parent_object_id,fc.parent_column_id) AS ColumnName,OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,COL_NAME(fc.referenced_object_id,fc.referenced_column_id) AS ReferenceColumnName
      FROM sys.foreign_keys AS f INNER JOIN sys.foreign_key_columns AS fc ON f.OBJECT_ID = fc.constraint_object_id WHERE f.parent_object_id = object_id(@TableName)
      DECLARE @No INT, @i INT
      SET @i=0
      SET @No=(SELECT COUNT(*) FROM @TempTable)
      DECLARE @mTable TABLE(t VARCHAR(4000))
      WHILE @i<@No BEGIN
            DECLARE @ForeignKeyName VARCHAR(100),@ColName VARCHAR(100),@RefTableName VARCHAR(100),@RefColName VARCHAR(100)
            SET @ForeignKeyName=(SELECT TOP(1) ForeignKey FROM @TempTable)
            SET @ColName=(SELECT TOP(1) ColumnName FROM @TempTable)
            SET @RefColName=(SELECT TOP(1) ReferenceColumnName FROM @TempTable)
            SET @RefTableName=(SELECT TOP(1) ReferenceTableName FROM @TempTable)
            INSERT INTO @mTable(t) SELECT ' ALTER TABLE ' +@TableName + ' WITH CHECK ADD  CONSTRAINT ' +@ForeignKeyName + ' FOREIGN KEY ' +' ('+ @ColName +') REFERENCES '+@RefTableName +' ('+ @RefColName +')'
            INSERT INTO @mTable(t) SELECT 'GO'
            DELETE FROM @TempTable WHERE ForeignKey=@ForeignKeyName
            SET @i=@i+1
      END
END
-- inserting foreing keys alter statements
INSERT INTO @sql(s) SELECT t FROM @mTable
RETURN
END
GO

-- GENERATING THE TABLE SCRIPT
DECLARE @TableNames TABLE(Tname VARCHAR(100))
DECLARE @TableName VARCHAR(100)
DECLARE @Result TABLE(Script nText)
DECLARE @No INT,@i INT
INSERT INTO @Result(Script) SELECT '-- =============================================='
INSERT INTO @Result(Script) SELECT '-- Author:        Ghulam Moinuddin'
INSERT INTO @Result(Script) SELECT '-- Create date: 30- Aug -2012'
INSERT INTO @Result(Script) SELECT '-- Description:   Scripting All the database tables'
INSERT INTO @Result(Script) SELECT '-- =============================================='
INSERT INTO @Result(Script) SELECT ''
INSERT INTO @TableNames SELECT name FROM sys.tables
SET @No=(SELECT COUNT(*) FROM @TableNames)
SET @i=0
WHILE @i<@No BEGIN
      SET @TableName =(SELECT TOP(1) Tname FROM @TableNames)
      INSERT INTO @Result(Script) SELECT '--=============================================='
      INSERT INTO @Result(Script) SELECT '-------- '+ CONVERT(VARCHAR(3),@i+1) +'. '+ @TableName+'  ============='
      INSERT INTO @Result(Script) SELECT '--=============================================='
      INSERT INTO @Result(Script) SELECT s FROM dbo.TableScript(@TableName)
      INSERT INTO @Result(Script) SELECT 'GO'
      DELETE FROM @TableNames WHERE Tname=@TableName
      SET @i=@i+1
END

-- GENETATING RELATION SCRIPT
DECLARE @Fname VARCHAR(100)
INSERT INTO @TableNames SELECT name FROM sys.tables
SET @No=(SELECT COUNT(*) FROM @TableNames)
SET @i=0
WHILE @i<@No BEGIN
      SET @TableName =(SELECT TOP(1) Tname FROM @TableNames)
      select @Fname = constraint_name from information_schema.table_constraints
      where table_name = @TableName and constraint_type='FOREIGN KEY'
      IF @Fname IS NOT NULL BEGIN
            IF @i=0 BEGIN
                  INSERT INTO @Result(Script) SELECT '-------------- FOREIGN KEY RELATION --------------------------------'
            END
            INSERT INTO @Result(Script) SELECT s FROM dbo.RelationScript(@TableName)
      END
      DELETE FROM @TableNames WHERE Tname=@TableName
      SET @i=@i+1
END
IF EXISTS(SELECT * FROM sys.objects WHERE type_desc LIKE '%FUNCTION%' AND name='TableScript') BEGIN
      DROP FUNCTION [dbo].[TableScript]
END
IF EXISTS(SELECT * FROM sys.objects WHERE type_desc LIKE '%FUNCTION%' AND name='RelationScript') BEGIN
      DROP FUNCTION [dbo].[RelationScript]
END
SELECT Script FROM @Result
--INSERT INTO @Result(Script) SELECT '-------------- Stored Procedures --------------------------------'
Categories: