工作中使用sql杂记
时间:2021-07-01 10:21:17
帮助过:9人阅读
所有需要备份的表
DECLARE @fromtbs NVARCHAR(
500)
=‘hz_com_user,hz_bam_department,hz_hr_gzhsfw,hz_hr_XiaoWeiComPany,hz_com_parameter,hz_bam_position,hz_bam_dep_target,hz_bom_userall_maincofnig,‘,
@index INT,
--‘,‘所在的位置 将所有表切割为单表用
@fromtable NVARCHAR(
50),
--需要备份的原表名称
@totable NVARCHAR(
50),
--进行备份的新表名称
@insertfields NVARCHAR(
1000)
=‘‘,
--插入时间和表名对应关系的str
@sql NVARCHAR(
3000),
--因表名为变量 需要执行的sql语句
@temptablename NVARCHAR(
50)
--临时拼接的表名
--使用index 和 substring方法进行循环
--获取第一个,号所在的位置
SET @index= (
SELECT CHARINDEX(
‘,‘,
@fromtbs))
--开始循环
WHILE @index>0
BEGIN
--截取第一个位置所在的表名
SET @fromtable=(
SELECT SUBSTRING(
@fromtbs,
1,
@index-1))
--截取剩下的所有需要备份的表 准备下次循环截取
SET @fromtbs = (
SELECT SUBSTRING(
@fromtbs,
@index+1,
LEN(
@fromtbs)))
--为要备份的表取名
SET @totable=@fromtable+‘_bak_‘+(
SELECT CONVERT(
varchar(
100),
GETDATE(),
112))
--如果存在删除 不存在select 原表 into 备份表
SET @sql = ‘IF EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N‘‘[dbo].‘+@totable+‘‘‘‘+‘)) DROP table ‘+@totable
EXEC(
@sql)
SET @sql=‘ select * into ‘+@totable+‘ from HRMS_Pro_20170401.dbo.‘+@fromtable+‘‘
EXEC(
@sql)
--拼接所有的备份表名称 便于插入R_Date_And_TableName表
SET @insertfields+=(
‘,‘‘‘+@totable+‘‘‘‘)
SET @index= (
SELECT CHARINDEX(
‘,‘,
@fromtbs))
END
View Code
工作中使用sql杂记
标签:varchar hsf 技术分享 convert bak sql 插入时间 开始 获取