使用现有表的引用创建多个表,但名称不同

时间:2017-02-02 17:44:25

标签: sql sql-server tsql

我有一个要求,我需要在一些现有表的帮助下创建多个表,但新表会有一些不同的名称。

例如:

现有表名:

INT_Employees,
INT_HumanResource,
INT_Payroll,
INT_Contacts etc..

新表应该有STG前缀,所以它应该如下所示:

STG_Employees,
STG_HumanResource,
STG_Payroll,
STG_Contacts etc..

注意:大约有127个表,我们需要创建新的127个表,前缀为STG _。

先谢谢。

1 个答案:

答案 0 :(得分:1)

如果您只是想复制表结构,可以使用select into和where谓词来阻止任何行返回。

select * into STG_Employees from INT_Employees where 1 = 0

请为每个表重复此操作。

- 编辑 -

以下是一个示例,您可以利用动态SQL来执行此任务,而不是诉诸循环。我们只是使用sys.tables来帮助我们生成sql语句。

declare @sql nvarchar(max) = ''

select @sql = @sql + 'select * into ' + stuff(name, 1, 4, 'STG_') + ' from ' + name + ' where 1 = 0;'
from sys.tables 
where name like 'INT[_]%'

select @sql --once your comfortable the sql being generated is correct simply uncomment the next line
--exec sp_executesql @sql

请注意,如果您需要主键,索引,外键,计算列等,则需要以另一种方式生成这些脚本。这只会生成表结构。