기존 테이블에서 테이블(구조)을 작성합니다.
다른 테이블과 동일한 구조를 새 테이블 작성 방법
나는 노력했다.
CREATE TABLE dom AS SELECT * FROM dom1 WHERE 1=2
그러나 동작하지 않는 에러가 발생했습니다.
시험:
Select * Into <DestinationTableName> From <SourceTableName> Where 1 = 2
인덱스, 키 등은 복사되지 않습니다.
구조 전체를 복사하려면 테이블의 Create Script를 생성해야 합니다.이 스크립트를 사용하여 동일한 구조의 새 테이블을 만들 수 있습니다.그런 다음 필요에 따라 데이터를 새 테이블에 덤프할 수도 있습니다.
Enterprise Manager를 사용하는 경우 테이블을 마우스 오른쪽 버튼으로 클릭하고 Copy를 선택하여 Create Script를 생성합니다.
이것은 테이블 구조를 복제하는 데 사용하는 것입니다(열만 해당).
SELECT TOP 0 *
INTO NewTable
FROM TableStructureIWishToClone
구조만 복사(모든 열 복사)
Select Top 0 * into NewTable from OldTable
구조만 복사(일부 열 복사)
Select Top 0 Col1,Col2,Col3,Col4,Col5 into NewTable from OldTable
데이터와 함께 구조 복사
Select * into NewTable from OldTable
같은 구조의 테이블이 이미 있고 데이터만 복사하려는 경우 이 옵션을 사용하십시오.
Insert into NewTable Select * from OldTable
MYSQL의 경우:
다음을 사용할 수 있습니다.
CREATE TABLE foo LIKE bar;
매뉴얼은 이쪽입니다.
Create table abc select * from def limit 0;
이것은 확실히 효과가 있을 것이다.
또한 다음 작업을 수행할 수 있다는 점도 언급할 필요가 있습니다.
복제할 테이블을 오른쪽 클릭합니다.> [ Script Table As ]> [ Create To ]> [ New Query Editor ]창
그런 다음 생성된 스크립트에서 방금 오른쪽 클릭한 테이블의 이름을 나타내는 경우 새 테이블의 이름을 원하는 이름으로 변경하고Execute
PK, 인덱스, 파티션 상태 등 테이블의 스키마를 복사하기 위해 다음과 같은 저장된 proc를 사용합니다.아주 빠르지는 않지만 효과가 있는 것 같아요.어떻게 하면 더 빨리 할 수 있을까 하는 아이디어라도 환영합니다.
/*
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 AT_QUOTE_CART as select * from QUOTE_CART where 0=1 ;
데이터를 복사하려면 다음 항목을 사용하십시오.
create table AT_QUOTE_CART as select * from QUOTE_CART ;
왜 그렇게 하고 싶은지 모르겠지만, 시도해봐
SELECT *
INTO NewTable
FROM OldTable
WHERE 1 = 2
그건 작동할 거야.
동일한 데이터베이스를 복사하는 경우
Select * INTO NewTableName from OldTableName
다른 데이터베이스인 경우
Select * INTO NewTableName from DatabaseName.OldTableName
SELECT *
INTO NewTable
FROM OldTable
WHERE 1 = 2
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;
SELECT * INTO newtable
from Oldtable
SQL에서 테이블을 복제하는 방법에 따르면 다음과 같습니다.
CREATE TABLE copyTable LIKE originalTable;
그것은 구조에만 유효합니다.구조 및 데이터의 경우 다음을 사용합니다.
CREATE TABLE new_table LIKE original_table;
INSERT INTO new_table SELECT * FROM original_table;
내가 찾던 걸 여기서 찾았어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;
원래 테이블에서 복사할 유일한 구조를 가진 테이블을 작성하려면 다음 명령을 사용합니다.
create table <tablename> as select * from <sourcetablename> where 1>2;
이 잘못된 상태에 의해 레코드를 남겨두고 구조를 복사할 수 있습니다.
한 데이터베이스에서 다른 데이터베이스로 테이블을 복사해야 했습니다.Sequel Ace와 같은 GUI를 사용하는 사용자는 테이블을 마우스 오른쪽 버튼으로 클릭하고 'copy create table syntax'를 클릭한 후 해당 쿼리를 실행할 수 있습니다(예: 테이블 이름 변경, 외부 키 제거, 열 추가/제거 등 필요한 경우 쿼리를 편집할 수 있습니다).
언급URL : https://stackoverflow.com/questions/2505728/create-table-structure-from-existing-table
'programing' 카테고리의 다른 글
varchar(8000)보다 varchar(500)가 유리합니까? (0) | 2023.04.20 |
---|---|
윈도우즈 배치 스크립트에서 날짜 및 시간 형식 지정 (0) | 2023.04.20 |
C# Excel Interop - 워크시트를 호출할 때 '게시' 대화 상자를 표시하지 않습니다.ExportAsFixedFormat (0) | 2023.04.15 |
UTF-8 인코딩된 NSData를 NSString으로 변환 (0) | 2023.04.15 |
를 사용하여 Windows 64비트플랫폼을 검출하는 방법인터넷? (0) | 2023.04.15 |