Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从现有表创建表(结构)_Sql Server - Fatal编程技术网

Sql server 从现有表创建表(结构)

Sql server 从现有表创建表(结构),sql-server,Sql Server,如何创建新表,该表的结构应与另一个表相同 我试过了 CREATE TABLE dom AS SELECT * FROM dom1 WHERE 1=2 但出现了不工作错误请尝试: Select * Into <DestinationTableName> From <SourceTableName> Where 1 = 2 从1=2处选择*进入 请注意,这不会复制索引、键等 如果要复制整个结构,则需要生成表的创建脚本。可以使用该脚本创建具有相同结构的新表。如果需要,还可

如何创建新表,该表的结构应与另一个表相同

我试过了

CREATE TABLE dom AS SELECT * FROM dom1 WHERE 1=2
但出现了不工作错误

请尝试:

Select * Into <DestinationTableName> From <SourceTableName> Where 1 = 2
从1=2处选择*进入
请注意,这不会复制索引、键等

如果要复制整个结构,则需要生成表的创建脚本。可以使用该脚本创建具有相同结构的新表。如果需要,还可以将数据转储到新表中


如果您使用的是Enterprise Manager,只需右键单击该表并选择“复制”即可生成一个创建脚本。

我不知道您为什么要这样做,但请尝试:

SELECT * 
INTO NewTable
FROM OldTable
WHERE 1 = 2
SELECT *
INTO NewTable
FROM OldTable
WHERE 1 = 2

应该有用。

在这里找到了我要找的东西。帮助我回忆起3-4年前我用过的东西

我希望重用相同的语法,以便能够使用表的联接产生的数据创建表

经过几次尝试后,提出了以下查询

SELECT a.*
INTO   DetailsArchive
FROM   (SELECT d.*
        FROM   details AS d
               INNER JOIN
               port AS p
               ON p.importid = d.importid
        WHERE  p.status = 2) AS a;

这是我用来克隆表结构(仅列)的


这将肯定会起作用

可能还值得一提的是,您可以执行以下操作:

右键单击要复制的表将表脚本化为创建到新查询编辑器窗口


然后,其中是您在已生成的脚本中右键单击的表的名称,请将该名称更改为您希望调用的新表的名称,然后单击执行。。下面的示例复制了现有表的整个结构,但不复制数据

Copy the table structure:-
select * into newtable from oldtable where 1=2;

Copy the table structure along with table data:-
select * into newtable from oldtable where 1=1;
create table AT_QUOTE_CART as select * from QUOTE_CART where 0=1 ;
如果要复制数据,请使用以下方法:

create table AT_QUOTE_CART as select * from QUOTE_CART ;

对于MYSQL:

您可以使用:

CREATE TABLE foo LIKE bar;
.

仅复制结构(复制所有列)

仅复制结构(复制某些列)

用数据复制结构

Select * into NewTable from OldTable
如果您已经有一个具有相同结构的表,并且您只想复制数据,那么使用这个

Insert into NewTable Select * from OldTable
  • 如果要复制相同的数据库

    Select * INTO NewTableName from OldTableName
    
  • 如果另一个数据库

    Select * INTO NewTableName from DatabaseName.OldTableName
    

  • 我使用以下存储过程来复制表的模式,包括PK、索引、分区状态。这不是很快,但似乎很管用。我欢迎任何加快速度的想法:

        /*
            Clones a table's schema from an existing table (without data)
            if target table exists, it will be dropped first.
            The following schema elements are cloned:
                * Structure
                * Primary key
                * Indexes
                * Constraints
        DOES NOT copy:
            * Triggers
            * File groups
    
        ASSUMPTION: constraints are uniquely named with the table name, so that we dont end up with duplicate constraint names
    */
    CREATE PROCEDURE [dbo].[spCloneTableStructure]
    
    @SourceTable            nvarchar(255),
    @DestinationTable       nvarchar(255),
    @PartionField           nvarchar(255),
    @SourceSchema           nvarchar(255) = 'dbo',  
    @DestinationSchema      nvarchar(255) = 'dbo',    
    @RecreateIfExists       bit = 1
    
    AS
    BEGIN
    
    DECLARE @msg  nvarchar(200), @PartionScript nvarchar(255), @sql NVARCHAR(MAX)
    
        IF EXISTS(Select s.name As SchemaName, t.name As TableName
                            From sys.tables t
                            Inner Join sys.schemas s On t.schema_id = s.schema_id
                            Inner Join sys.partitions p on p.object_id = t.object_id
                            Where p.index_id In (0, 1) and t.name = @SourceTable
                            Group By s.name, t.name
                            Having Count(*) > 1)
    
            SET @PartionScript = ' ON [PS_PartitionByCompanyId]([' + @PartionField + '])'
        else
            SET @PartionScript = ''
    
    SET NOCOUNT ON;
    BEGIN TRY   
        SET @msg ='  CloneTable  ' + @DestinationTable + ' - Step 1, Drop table if exists. Timestamp: '  + CONVERT(NVARCHAR(50),GETDATE(),108)
         RAISERROR( @msg,0,1) WITH NOWAIT
        --drop the table
        if EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @DestinationTable)
        BEGIN
            if @RecreateIfExists = 1
                BEGIN
                    exec('DROP TABLE [' + @DestinationSchema + '].[' + @DestinationTable + ']')
                END
            ELSE
                RETURN
        END
    
        SET @msg ='  CloneTable  ' + @DestinationTable + ' - Step 2, Create table. Timestamp: '  + CONVERT(NVARCHAR(50),GETDATE(),108)
        RAISERROR( @msg,0,1) WITH NOWAIT
        --create the table
        exec('SELECT TOP (0) * INTO [' + @DestinationTable + '] FROM [' + @SourceTable + ']')       
    
        --create primary key
        SET @msg ='  CloneTable  ' + @DestinationTable + ' - Step 3, Create primary key. Timestamp: '  + CONVERT(NVARCHAR(50),GETDATE(),108)
        RAISERROR( @msg,0,1) WITH NOWAIT
        DECLARE @PKSchema nvarchar(255), @PKName nvarchar(255),@count   INT
        SELECT TOP 1 @PKSchema = CONSTRAINT_SCHEMA, @PKName = CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = @SourceSchema AND TABLE_NAME = @SourceTable AND CONSTRAINT_TYPE = 'PRIMARY KEY'
        IF NOT @PKSchema IS NULL AND NOT @PKName IS NULL
        BEGIN
            DECLARE @PKColumns nvarchar(MAX)
            SET @PKColumns = ''
    
            SELECT @PKColumns = @PKColumns + '[' + COLUMN_NAME + '],'
                FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
                where TABLE_NAME = @SourceTable and TABLE_SCHEMA = @SourceSchema AND CONSTRAINT_SCHEMA = @PKSchema AND CONSTRAINT_NAME= @PKName
                ORDER BY ORDINAL_POSITION
    
            SET @PKColumns = LEFT(@PKColumns, LEN(@PKColumns) - 1)
    
            exec('ALTER TABLE [' + @DestinationSchema + '].[' + @DestinationTable + '] ADD  CONSTRAINT [PK_' + @DestinationTable + '] PRIMARY KEY CLUSTERED (' + @PKColumns + ')' + @PartionScript);
        END
    
        --create other indexes
        SET @msg ='  CloneTable  ' + @DestinationTable + ' - Step 4, Create Indexes. Timestamp: '  + CONVERT(NVARCHAR(50),GETDATE(),108)
        RAISERROR( @msg,0,1) WITH NOWAIT
        DECLARE @IndexId int, @IndexName nvarchar(255), @IsUnique bit, @IsUniqueConstraint bit, @FilterDefinition nvarchar(max), @type int
    
        set @count=0
        DECLARE indexcursor CURSOR FOR
        SELECT index_id, name, is_unique, is_unique_constraint, filter_definition, type FROM sys.indexes WHERE is_primary_key = 0 and object_id = object_id('[' + @SourceSchema + '].[' + @SourceTable + ']')
        OPEN indexcursor;
        FETCH NEXT FROM indexcursor INTO @IndexId, @IndexName, @IsUnique, @IsUniqueConstraint, @FilterDefinition, @type
        WHILE @@FETCH_STATUS = 0
           BEGIN
                set @count =@count +1
                DECLARE @Unique nvarchar(255)
                SET @Unique = CASE WHEN @IsUnique = 1 THEN ' UNIQUE ' ELSE '' END
    
                DECLARE @KeyColumns nvarchar(max), @IncludedColumns nvarchar(max)
                SET @KeyColumns = ''
                SET @IncludedColumns = ''
    
                select @KeyColumns = @KeyColumns + '[' + c.name + '] ' + CASE WHEN is_descending_key = 1 THEN 'DESC' ELSE 'ASC' END + ',' from sys.index_columns ic
                inner join sys.columns c ON c.object_id = ic.object_id and c.column_id = ic.column_id
                where index_id = @IndexId and ic.object_id = object_id('[' + @SourceSchema + '].[' + @SourceTable + ']') and key_ordinal > 0
                order by index_column_id
    
                select @IncludedColumns = @IncludedColumns + '[' + c.name + '],' from sys.index_columns ic
                inner join sys.columns c ON c.object_id = ic.object_id and c.column_id = ic.column_id
                where index_id = @IndexId and ic.object_id = object_id('[' + @SourceSchema + '].[' + @SourceTable + ']') and key_ordinal = 0
                order by index_column_id
    
                IF LEN(@KeyColumns) > 0
                    SET @KeyColumns = LEFT(@KeyColumns, LEN(@KeyColumns) - 1)
    
                IF LEN(@IncludedColumns) > 0
                BEGIN
                    SET @IncludedColumns = ' INCLUDE (' + LEFT(@IncludedColumns, LEN(@IncludedColumns) - 1) + ')'
                END
    
                IF @FilterDefinition IS NULL
                    SET @FilterDefinition = ''
                ELSE
                    SET @FilterDefinition = 'WHERE ' + @FilterDefinition + ' '
    
                SET @msg ='  CloneTable  ' + @DestinationTable + ' - Step 4.' + CONVERT(NVARCHAR(5),@count) + ', Create Index ' + @IndexName + '. Timestamp: '  + CONVERT(NVARCHAR(50),GETDATE(),108)
                RAISERROR( @msg,0,1) WITH NOWAIT
    
                if @type = 2
                    SET @sql = 'CREATE ' + @Unique + ' NONCLUSTERED INDEX [' + @IndexName + '] ON [' + @DestinationSchema + '].[' + @DestinationTable + '] (' + @KeyColumns + ')' + @IncludedColumns + @FilterDefinition  + @PartionScript
                ELSE
                    BEGIN
                        SET @sql = 'CREATE ' + @Unique + ' CLUSTERED INDEX [' + @IndexName + '] ON [' + @DestinationSchema + '].[' + @DestinationTable + '] (' + @KeyColumns + ')' + @IncludedColumns + @FilterDefinition + @PartionScript
                    END
                EXEC (@sql)
                FETCH NEXT FROM indexcursor INTO @IndexId, @IndexName, @IsUnique, @IsUniqueConstraint, @FilterDefinition, @type
           END
        CLOSE indexcursor
        DEALLOCATE indexcursor
    
        --create constraints
        SET @msg ='  CloneTable  ' + @DestinationTable + ' - Step 5, Create constraints. Timestamp: '  + CONVERT(NVARCHAR(50),GETDATE(),108)
        RAISERROR( @msg,0,1) WITH NOWAIT
        DECLARE @ConstraintName nvarchar(max), @CheckClause nvarchar(max), @ColumnName NVARCHAR(255)
        DECLARE const_cursor CURSOR FOR
            SELECT
                REPLACE(dc.name, @SourceTable, @DestinationTable),[definition], c.name
            FROM sys.default_constraints dc
                INNER JOIN sys.columns c ON dc.parent_object_id = c.object_id AND dc.parent_column_id = c.column_id
            WHERE OBJECT_NAME(parent_object_id) =@SourceTable               
        OPEN const_cursor
        FETCH NEXT FROM const_cursor INTO @ConstraintName, @CheckClause, @ColumnName
        WHILE @@FETCH_STATUS = 0
           BEGIN
                exec('ALTER TABLE [' + @DestinationTable + '] ADD CONSTRAINT [' + @ConstraintName + '] DEFAULT ' + @CheckClause + ' FOR ' + @ColumnName)
                FETCH NEXT FROM const_cursor INTO @ConstraintName, @CheckClause, @ColumnName
           END;
        CLOSE const_cursor
        DEALLOCATE const_cursor                 
    
    
    END TRY
        BEGIN CATCH
            IF (SELECT CURSOR_STATUS('global','indexcursor')) >= -1
            BEGIN
             DEALLOCATE indexcursor
            END
    
            IF (SELECT CURSOR_STATUS('global','const_cursor')) >= -1
            BEGIN
             DEALLOCATE const_cursor
            END
    
    
            PRINT 'Error Message: ' + ERROR_MESSAGE(); 
        END CATCH
    
    END
    
    GO
    

    如果要创建一个表,该表中只有要从原始表复制的结构,则可以使用以下命令执行此操作

    create table <tablename> as select * from <sourcetablename> where 1>2;
    
    
    创建表格为select*,其中1>2;
    


    在这种错误的情况下,您可以保留记录并复制结构。

    我需要从一个数据库复制一个表到另一个数据库。对于任何使用类似Sequel Ace的GUI的用户,您可以右键单击表,然后单击“复制创建表语法”并运行该查询(您可以编辑查询,例如更改表名、删除外键、添加/删除列,如果需要)

    Kevin,只需在您的答案中进行一个小的格式更改:-选择*进入其中1=2Qutbuddin,1=2将阻止数据从源表复制到目标表。自己试试:-创建表Table1(Id int,Name varchar(200))插入表1值(1,'A')插入表1值(2,'B'))--将创建表1中有数据的表2选择*从表1中进入表2,其中1=2--将创建表1中没有数据的表2选择*从表1中进入表2,其中1=2我认为1=2只是一个奇怪的错误参数,以避免复制数据。我想这也会复制数据吗?他只想要结构。@Ashis Gupta-谢谢,我忘记了“where”:)这不会复制约束和键问题被标记为
    sql server
    ,该语法对其无效,仅供参考。由于与MySQL的关系,不应算作答案,而不是与sql server的关系仅供参考-这还保留了主键和索引。简单,很好;)我正在搜索MySQL语法感谢请使用代码标记以提高可读性,这对于解释代码更有用。感谢您提供此代码片段,它可能会提供一些即时帮助。通过说明为什么这是一个很好的解决问题的方法,正确地解释它的教育价值,并将使它对未来有类似但不完全相同问题的读者更有用。特别是,在未经培训的人看来,它似乎也会复制
    Oldtable
    的内容。如何避免这种情况?在MSSQL 2008 R2中为我提供了一个非常好的解决方案,简单而优雅。有没有一种方法可以使这个副本同时包含索引和主键?要使它更快,可能只需将游标声明为
    游标本地快进
    。就我个人而言,我试图在不使用游标的情况下创建一个类似的脚本,看看它的性能如何。Hi@mendosi我知道它很旧,但我目前正在考虑生成包含所有杂项(约束/索引/分区/触发器等)以及列定义的创建脚本。我想知道您是否成功地用非游标方法重新创建了它。如果是的话,你介意分享一下吗?非常感谢,谢谢我写的脚本复制了一个或多个表,不使用游标。它也太大了,无法发表评论。相反,我将链接到Hans Michiels的脚本:非常有用,有趣的是,where子句总是错误的!完美的感谢您注意,问题标记为
    sql server
    ,这在sql server中不起作用。此解决方案比附加条件“1=2”更清晰,我建议这是现有答案的副本。在提交新答案之前,通读现有答案,并在适当的情况下添加评论/投票。但这与我在此处使用的create命令执行此操作的现有答案不同。如果您查看@AbhiUrs answer(2015年1月2日),您的答案与他们答案的第一部分类似,尽管有一个稍微不同的where子句。第一部分=>
    在“报价”购物车处创建表,作为“从报价”购物车中选择*,其中0=1替换这些表名,我们得到:
    创建表为select*,其中0=1作为
    
    Select * INTO NewTableName from OldTableName
    
    Select * INTO NewTableName from DatabaseName.OldTableName
    
        /*
            Clones a table's schema from an existing table (without data)
            if target table exists, it will be dropped first.
            The following schema elements are cloned:
                * Structure
                * Primary key
                * Indexes
                * Constraints
        DOES NOT copy:
            * Triggers
            * File groups
    
        ASSUMPTION: constraints are uniquely named with the table name, so that we dont end up with duplicate constraint names
    */
    CREATE PROCEDURE [dbo].[spCloneTableStructure]
    
    @SourceTable            nvarchar(255),
    @DestinationTable       nvarchar(255),
    @PartionField           nvarchar(255),
    @SourceSchema           nvarchar(255) = 'dbo',  
    @DestinationSchema      nvarchar(255) = 'dbo',    
    @RecreateIfExists       bit = 1
    
    AS
    BEGIN
    
    DECLARE @msg  nvarchar(200), @PartionScript nvarchar(255), @sql NVARCHAR(MAX)
    
        IF EXISTS(Select s.name As SchemaName, t.name As TableName
                            From sys.tables t
                            Inner Join sys.schemas s On t.schema_id = s.schema_id
                            Inner Join sys.partitions p on p.object_id = t.object_id
                            Where p.index_id In (0, 1) and t.name = @SourceTable
                            Group By s.name, t.name
                            Having Count(*) > 1)
    
            SET @PartionScript = ' ON [PS_PartitionByCompanyId]([' + @PartionField + '])'
        else
            SET @PartionScript = ''
    
    SET NOCOUNT ON;
    BEGIN TRY   
        SET @msg ='  CloneTable  ' + @DestinationTable + ' - Step 1, Drop table if exists. Timestamp: '  + CONVERT(NVARCHAR(50),GETDATE(),108)
         RAISERROR( @msg,0,1) WITH NOWAIT
        --drop the table
        if EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @DestinationTable)
        BEGIN
            if @RecreateIfExists = 1
                BEGIN
                    exec('DROP TABLE [' + @DestinationSchema + '].[' + @DestinationTable + ']')
                END
            ELSE
                RETURN
        END
    
        SET @msg ='  CloneTable  ' + @DestinationTable + ' - Step 2, Create table. Timestamp: '  + CONVERT(NVARCHAR(50),GETDATE(),108)
        RAISERROR( @msg,0,1) WITH NOWAIT
        --create the table
        exec('SELECT TOP (0) * INTO [' + @DestinationTable + '] FROM [' + @SourceTable + ']')       
    
        --create primary key
        SET @msg ='  CloneTable  ' + @DestinationTable + ' - Step 3, Create primary key. Timestamp: '  + CONVERT(NVARCHAR(50),GETDATE(),108)
        RAISERROR( @msg,0,1) WITH NOWAIT
        DECLARE @PKSchema nvarchar(255), @PKName nvarchar(255),@count   INT
        SELECT TOP 1 @PKSchema = CONSTRAINT_SCHEMA, @PKName = CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = @SourceSchema AND TABLE_NAME = @SourceTable AND CONSTRAINT_TYPE = 'PRIMARY KEY'
        IF NOT @PKSchema IS NULL AND NOT @PKName IS NULL
        BEGIN
            DECLARE @PKColumns nvarchar(MAX)
            SET @PKColumns = ''
    
            SELECT @PKColumns = @PKColumns + '[' + COLUMN_NAME + '],'
                FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
                where TABLE_NAME = @SourceTable and TABLE_SCHEMA = @SourceSchema AND CONSTRAINT_SCHEMA = @PKSchema AND CONSTRAINT_NAME= @PKName
                ORDER BY ORDINAL_POSITION
    
            SET @PKColumns = LEFT(@PKColumns, LEN(@PKColumns) - 1)
    
            exec('ALTER TABLE [' + @DestinationSchema + '].[' + @DestinationTable + '] ADD  CONSTRAINT [PK_' + @DestinationTable + '] PRIMARY KEY CLUSTERED (' + @PKColumns + ')' + @PartionScript);
        END
    
        --create other indexes
        SET @msg ='  CloneTable  ' + @DestinationTable + ' - Step 4, Create Indexes. Timestamp: '  + CONVERT(NVARCHAR(50),GETDATE(),108)
        RAISERROR( @msg,0,1) WITH NOWAIT
        DECLARE @IndexId int, @IndexName nvarchar(255), @IsUnique bit, @IsUniqueConstraint bit, @FilterDefinition nvarchar(max), @type int
    
        set @count=0
        DECLARE indexcursor CURSOR FOR
        SELECT index_id, name, is_unique, is_unique_constraint, filter_definition, type FROM sys.indexes WHERE is_primary_key = 0 and object_id = object_id('[' + @SourceSchema + '].[' + @SourceTable + ']')
        OPEN indexcursor;
        FETCH NEXT FROM indexcursor INTO @IndexId, @IndexName, @IsUnique, @IsUniqueConstraint, @FilterDefinition, @type
        WHILE @@FETCH_STATUS = 0
           BEGIN
                set @count =@count +1
                DECLARE @Unique nvarchar(255)
                SET @Unique = CASE WHEN @IsUnique = 1 THEN ' UNIQUE ' ELSE '' END
    
                DECLARE @KeyColumns nvarchar(max), @IncludedColumns nvarchar(max)
                SET @KeyColumns = ''
                SET @IncludedColumns = ''
    
                select @KeyColumns = @KeyColumns + '[' + c.name + '] ' + CASE WHEN is_descending_key = 1 THEN 'DESC' ELSE 'ASC' END + ',' from sys.index_columns ic
                inner join sys.columns c ON c.object_id = ic.object_id and c.column_id = ic.column_id
                where index_id = @IndexId and ic.object_id = object_id('[' + @SourceSchema + '].[' + @SourceTable + ']') and key_ordinal > 0
                order by index_column_id
    
                select @IncludedColumns = @IncludedColumns + '[' + c.name + '],' from sys.index_columns ic
                inner join sys.columns c ON c.object_id = ic.object_id and c.column_id = ic.column_id
                where index_id = @IndexId and ic.object_id = object_id('[' + @SourceSchema + '].[' + @SourceTable + ']') and key_ordinal = 0
                order by index_column_id
    
                IF LEN(@KeyColumns) > 0
                    SET @KeyColumns = LEFT(@KeyColumns, LEN(@KeyColumns) - 1)
    
                IF LEN(@IncludedColumns) > 0
                BEGIN
                    SET @IncludedColumns = ' INCLUDE (' + LEFT(@IncludedColumns, LEN(@IncludedColumns) - 1) + ')'
                END
    
                IF @FilterDefinition IS NULL
                    SET @FilterDefinition = ''
                ELSE
                    SET @FilterDefinition = 'WHERE ' + @FilterDefinition + ' '
    
                SET @msg ='  CloneTable  ' + @DestinationTable + ' - Step 4.' + CONVERT(NVARCHAR(5),@count) + ', Create Index ' + @IndexName + '. Timestamp: '  + CONVERT(NVARCHAR(50),GETDATE(),108)
                RAISERROR( @msg,0,1) WITH NOWAIT
    
                if @type = 2
                    SET @sql = 'CREATE ' + @Unique + ' NONCLUSTERED INDEX [' + @IndexName + '] ON [' + @DestinationSchema + '].[' + @DestinationTable + '] (' + @KeyColumns + ')' + @IncludedColumns + @FilterDefinition  + @PartionScript
                ELSE
                    BEGIN
                        SET @sql = 'CREATE ' + @Unique + ' CLUSTERED INDEX [' + @IndexName + '] ON [' + @DestinationSchema + '].[' + @DestinationTable + '] (' + @KeyColumns + ')' + @IncludedColumns + @FilterDefinition + @PartionScript
                    END
                EXEC (@sql)
                FETCH NEXT FROM indexcursor INTO @IndexId, @IndexName, @IsUnique, @IsUniqueConstraint, @FilterDefinition, @type
           END
        CLOSE indexcursor
        DEALLOCATE indexcursor
    
        --create constraints
        SET @msg ='  CloneTable  ' + @DestinationTable + ' - Step 5, Create constraints. Timestamp: '  + CONVERT(NVARCHAR(50),GETDATE(),108)
        RAISERROR( @msg,0,1) WITH NOWAIT
        DECLARE @ConstraintName nvarchar(max), @CheckClause nvarchar(max), @ColumnName NVARCHAR(255)
        DECLARE const_cursor CURSOR FOR
            SELECT
                REPLACE(dc.name, @SourceTable, @DestinationTable),[definition], c.name
            FROM sys.default_constraints dc
                INNER JOIN sys.columns c ON dc.parent_object_id = c.object_id AND dc.parent_column_id = c.column_id
            WHERE OBJECT_NAME(parent_object_id) =@SourceTable               
        OPEN const_cursor
        FETCH NEXT FROM const_cursor INTO @ConstraintName, @CheckClause, @ColumnName
        WHILE @@FETCH_STATUS = 0
           BEGIN
                exec('ALTER TABLE [' + @DestinationTable + '] ADD CONSTRAINT [' + @ConstraintName + '] DEFAULT ' + @CheckClause + ' FOR ' + @ColumnName)
                FETCH NEXT FROM const_cursor INTO @ConstraintName, @CheckClause, @ColumnName
           END;
        CLOSE const_cursor
        DEALLOCATE const_cursor                 
    
    
    END TRY
        BEGIN CATCH
            IF (SELECT CURSOR_STATUS('global','indexcursor')) >= -1
            BEGIN
             DEALLOCATE indexcursor
            END
    
            IF (SELECT CURSOR_STATUS('global','const_cursor')) >= -1
            BEGIN
             DEALLOCATE const_cursor
            END
    
    
            PRINT 'Error Message: ' + ERROR_MESSAGE(); 
        END CATCH
    
    END
    
    GO
    
    SELECT * INTO newtable
    from Oldtable
    
    create table <tablename> as select * from <sourcetablename> where 1>2;