在维护sql server数据库的过程中,大家是不是经常会遇到成千上万的类似log20050901 这种日志表,每一个表中数据都不是很多,一个一个打开看非常不方便,或者有时候我们需要把这些表中的资料汇总,一个一个打开操作也是很麻烦。下面就介绍了一种自动化的合并表的方法。
我的思路是创建一个用户存储过程来完成一系列自动化的操作,以下是代码。
--存储过程我命名为backupdata,可以使用自己定义的名称。
--参数1:@tabletarget 生成的目标表的名称
--参数2:@tablestart 合并开始的表名
--参数3:@tableend 合并结束的表名
create procedure backupdata @tabletarget sysname,@tablestart sysname,@tableend sysname
as
declare tnames_cursor cursor
for
select table_name
from information_schema.tables
open tnames_cursor
declare @tablename sysname
declare @tablepref sysname
declare @istargetexist integer
--判断目标表是否存在
set @istargetexist=(select count(table_name) from information_schema.tables where table_name = @tabletarget)
--如果目标表不存在则新建表
if @istargetexist=0
begin
--exec中的语句可以用sql server编写的表脚本替换。注意在目标表中不能够存在与需合并表中名称一样的“自动编号”类型的字段。
exec ('create table [dbo].[' @tabletarget ']
(
[log1] [nvarchar] (10) collate chinese_prc_ci_as null ,
[log2] [nvarchar] (10) collate chinese_prc_ci_as null ,
……
)')
end
fetch next from tnames_cursor into @tablename
while (@@fetch_status -1)
begin
if (@@fetch_status -2)
begin
select @tablename = rtrim(@tablename)
--以下两行根据日志表的名称更改
--取日志表名的前3位作为标识
select @tablepref = left(@tablename,3)
--判断表名是否附合要求
if (@tablepref='log') and (@tablename>=@tablestart) and (@tablename --开始导入
http://www.bkjia.com/phpjc/631117.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/631117.htmltecharticle在维护sql server数据库的过程中,大家是不是经常会遇到成千上万的类似log20050901 这种日志表,每一个表中数据都不是很多,一个一个打开看...