我需要一个查询来创建一个表,它是一个精确的副本,但是使用不同的表名,并且使用sql查询没有来自源表的任何数据!
答案 0 :(得分:11)
你可以试试这个
SELECT * INTO Table_Copy
FROM Table
where 1=2
它将创建一个具有相同结构的空表。
答案 1 :(得分:4)
Jonathan有它(upvoted),你可能应该选择它,因为它更便携。我通常使用类似的东西:
SELECT TOP 0 * INTO [New_Table] FROM [Old_Table]
我认为这更好地表达了你正在做的事情,但我喜欢Jonathan,因为'TOP 0'是特定于SQL Server的,所以他的便携性更强。
答案 2 :(得分:3)
答案 3 :(得分:1)
对于MySQL,您可以调用SHOW CREATE TABLE table_name;
它将显示CREATE TABLE查询。只需更改该查询中的表名,就可以了。
http://dev.mysql.com/doc/refman/5.1/en/show-create-table.html
答案 4 :(得分:1)
如果您使用Postgresql:
CREATE TABLE LIKE table_name
http://www.postgresql.org/docs/8.1/static/sql-createtable.html
答案 5 :(得分:1)
SELECT * INTO Table_Copy
FROM Table
where 1=2
当我尝试在没有任何数据的情况下创建表的副本时,这非常有效。
SELECT * INTO Table_Copy
FROM Table
这将创建包含数据的副本。
答案 6 :(得分:0)
答案 7 :(得分:0)
select * into newtablename from sourcetablename
go
truncate newtablename
go
这将产生精确的副本,但它也会首先复制您使用truncate语句删除的数据。
答案 8 :(得分:0)
create table <new table name> as select * from <old tale name from which you would like to extract data>
它将创建一个具有不同名称的新表,但会将旧表中的所有现有数据复制到新表中。
答案 9 :(得分:0)
在postgres中,您可以使用INHERITS或LIKE关键字来制作表的副本(仅复制表的结构)
CREATE TABLE client_new(LIKE客户端);
或
CREATE TABLE client_new()INHERITS(客户端)
使用INHERITS会在新子表与其父表之间创建持久关系。对父项的模式修改通常也传播给子项,默认情况下,子表的数据包含在父项的扫描中。 LIKE子句指定一个表,新表自动复制所有列名称,数据类型及其非空约束。与INHERITS类似,新表和原始表在创建完成后完全解耦。对原始表的更改将不会应用于新表,并且无法在原始表的扫描中包含新表的数据。