|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
首先我们要知道,或许有一项技术存在很多理由让我们可以选择使用MySQL学习教程,但是让我们不使用它往往只要有一个理由就足够了。server在保护SQLServer数据库的过程当中,人人是否是常常会碰到不计其数的相似log20050901这类日记表,每个表中数据都不是良多,一个一个翻开看十分不便利,大概偶然候我们必要把这些表中的材料汇总,一个一个翻开操纵也是很贫苦。上面就先容了一种主动化的兼并表的办法。
我的思绪是创立一个用户存储历程来完成一系列主动化的操纵,以下是代码。
--存储历程我定名为BackupData,可使用本人界说的称号。
--参数1:@TableTarget天生的方针表的称号
--参数2:@TableStart兼并入手下手的表名
--参数3:@TableEnd兼并停止的表名
CREATEPROCEDUREBackupData@TableTargetsysname,@TableStartsysname,@TableEndsysname
AS
DECLAREtnames_cursorCURSOR
FOR
SELECTTABLE_NAME
FROMINFORMATION_SCHEMA.TABLES
OPENtnames_cursor
DECLARE@TableNamesysname
DECLARE@TablePrefsysname
DECLARE@IsTargetExistinteger
--判别方针表是不是存在
SET@IsTargetExist=(SELECTcount(TABLE_NAME)FROMINFORMATION_SCHEMA.TABLESwheretable_name=@TableTarget)
--假如方针表不存在则新建表
IF@istargetexist=0
BEGIN
--EXEC中的语句能够用SQLServer编写的表剧本交换。注重在方针表中不克不及够存在与需兼并表中称号一样的“主动编号”范例的字段。
EXEC(CREATETABLE[dbo].[+@TableTarget+]
(
[LOG1][nvarchar](10)COLLATEChinese_PRC_CI_ASNULL,
[LOG2][nvarchar](10)COLLATEChinese_PRC_CI_ASNULL,
……
))
END
FETCHNEXTFROMtnames_cursorINTO@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<=@TableEnd)
--入手下手导进
BEGIN
EXEC(INSERTINTO+@TableTarget+SELECT*FROM+@TableName)
PRINT表+@TableName+已导进+@TableTarget+中
END
END
FETCHNEXTFROMtnames_cursorINTO@TableName
END
--开释内存
CLOSEtnames_cursor
DEALLOCATEtnames_cursor
把下面代码在SQL查询剖析器中运转即天生存储历程BackupData。
BackupData的利用办法以下:
EXECBackupData‘兼并后表名’,’入手下手表名’,’停止表名’,比方:
EXECBackupData‘_logs200508’,’log200508000000’,’log200508319999’。
由于我没有找到能够完成这类操纵的SQL语句以是写了如许的存储历程,假如人人有好的更复杂的举措请给我留言或来信:pujiang10@gmail.com。
与数据库相关的流程的逐渐标准化,使得解决方案提供商能以更便捷的方式提供服务、部署应用程序、规划容量和管理资源。DBaaS模式还有助于减少数据和数据库的冗余度并提升整体服务质量。 |
|