Sql 复制表格并将其删除
我知道我们可以简单地创建一个新表,然后通过Sql 复制表格并将其删除,sql,sql-server,sql-server-2008,tsql,stored-procedures,Sql,Sql Server,Sql Server 2008,Tsql,Stored Procedures,我知道我们可以简单地创建一个新表,然后通过 select * into tbl2 from tbl1 我想检查表tbl2是否存在,如果存在,则复制所有行;如果不存在,则创建一个新表,而无需在tbl2中指定列名,因为我正在tbl1中复制tbl2中的所有列。那么,我想扔掉旧桌子 if not exists(select * from tbl1 where id = 1) create table tbl2() drop tbl1 go 如果您不希望它成为temp table,请删除t
select * into tbl2 from tbl1
我想检查表tbl2是否存在,如果存在,则复制所有行;如果不存在,则创建一个新表,而无需在tbl2中指定列名,因为我正在tbl1中复制tbl2中的所有列。那么,我想扔掉旧桌子
if not exists(select * from tbl1 where id = 1)
create table tbl2()
drop tbl1
go
如果您不希望它成为temp table,请删除tempdb,这将检查tbl2,如果它确实存在,请插入表2中。如果它不存在,它将选择进入tbl2
IF (EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'schema'
AND TABLE_NAME = 'tbl2'))
BEGIN
-- If the table exists, insert into:
INSERT INTO tbl2 SELECT * from tbl1
drop tbl1
END
ELSE
BEGIN
SELECT * INTO tbl2 FROM tbl1
END
问题是,如果它确实存在,您如何确定表定义是完全相同的,如果您不希望进行这样的附加检查,并且始终假定它们是相同的,那么您可以使用INSERT INTO。。。从中选择*
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tbl2]') AND type in (N'U'))
BEGIN
-- create the table only if not there
select * into tbl2 from tbl1 where 1 <> 1
END
insert into tbl2 select * from tbl1
exists代码块是由SQLServerManagementStudio生成的,我刚刚复制了它
IF (EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'tbl2'))
BEGIN
-- tbl2 exists, so just copy rows
INSERT INTO tbl2 SELECT * FROM tbl1;
END
ELSE BEGIN
-- tbl2 doesn't exist, so create new table tbl2 and copy rows
SELECT * INTO tbl2 FROM tbl1;
DROP tbl1;
END
但这不会复制索引、键等,只复制else分支中创建时的列名。hi dan!它在tbl2不存在时工作,但在tbl2已经存在时给出错误。我不得不删除table_schema='schema'部分,工作正常。谢谢。啊,是的,您需要更改模式以匹配tbl1的模式。如果在多个schema(schema.tbl1 vs sch.tbl1)下存在相同的表名,则使用该部分可以确保查看正确的表。
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tbl2]') AND type in (N'U'))
BEGIN
-- create the table only if not there
select * into tbl2 from tbl1
END
ELSE BEGIN
insert into tbl2 select * from tbl1
END
IF (EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'tbl2'))
BEGIN
-- tbl2 exists, so just copy rows
INSERT INTO tbl2 SELECT * FROM tbl1;
END
ELSE BEGIN
-- tbl2 doesn't exist, so create new table tbl2 and copy rows
SELECT * INTO tbl2 FROM tbl1;
DROP tbl1;
END