1.触发器
Create Trigger emsDeviceRealTime
On ems_deviceRealTime --在ems_deviceRealTime(设备实时状态)表中创建触发器
for Update --Upatate事件触发
As --事件触发后所要做的事情
if Update(modifytime)
begin
declare @signalOld varchar(10)
declare @modifyTimeOld varchar(19)
select @signalOld=signalValue from deleted
select @modifyTimeOld=modifytime from deleted
– 设备状态异动 记录追加(ems_deviceState)
Insert into ems_deviceState
select NEWID(), --状态内码
inserted.id, --设备实时状态码
inserted.signal, --信号类型
@signalOld, --原信号值
signalValue, --新信号值
@modifyTimeOld, --旧异动时间
modifytime --新异动时间
from inserted
end
2.SQL 文 把压缩文件进行解压,然后读取CSV到数据库中。
/****** Object: StoredProcedure [dbo].[db_BackUpImport] Script Date: 2019/3/5 14:13:46 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[db_BackUpImport]
@DATABASENAME VARCHAR(100), --备份文件的路径
@FILEPATH VARCHAR(100), --备份文件的路径
@FILENAME VARCHAR(100), --备份文件名
@ID VARCHAR(36), --备份的ID
@ORGID VARCHAR(4), --数据库名字
@RETVAL INT OUTPUT – 运行结果(出参) 0:OK/1:NG
AS
BEGIN
SET @RETVAL = ‘0’
BEGIN TRY
EXEC sp_configure 'show advanced options',1 --开启配置
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',1 --开启配置
RECONFIGURE
SET QUOTED_IDENTIFIER OFF
BEGIN TRANSACTION
DECLARE @fileP VARCHAR(400)
-- ▼ 解压的文件夹如果存在的话 删除 ======================================================
SET @fileP = LEFT(@FILEPATH + @FILENAME,LEN(@FILEPATH + @FILENAME)-4)
DECLARE @fileEx int
EXEC com_FileExist @fileP, @fileEx output -- 判断文件存在不存在
if (@fileEx = 0)
BEGIN
DECLARE @EX VARCHAR(400)
SET @EX= 'ExEc master..xp_cmdshell ''rd '+@fileP+' /s/q''' -- 删除解压后的文件
ExEc (@EX)
END
-- ▲ 解压的文件夹如果存在的话 删除 ======================================================
-- ▼ 备份的文件夹压缩 ===================================================================
DECLARE @cmd VARCHAR(400)
DECLARE @xlspath VARCHAR(400)
DECLARE @outpath VARCHAR(400)
SELECT @xlspath= @FILEPATH + @FILENAME --'E:\emes_db_bk\20190104-164426.rar'
SELECT @outpath= @FILEPATH
SELECT @cmd='""%ProgramFiles%\WinRAR\winrar.exe"" x '+ @xlspath +' ' + @outpath --rar
EXEC master..xp_cmdshell @cmd
-- ▲ 备份的文件夹压缩完成 ===============================================================
-- ▼ 数据开始导入 =====================================================================
DECLARE @query varchar(1000)
DECLARE @max1 int
DECLARE @count1 int
DECLARE @filename varchar(100)
DECLARE @TableName varchar(100)
SET @count1 =0
create table #x (name varchar(200))
SET @query ='master.dbo.xp_cmdshell "dir '+ @fileP +'\*.csv /b"'
insert #x exec (@query)
delete from #x where name is NULL
SELECT identity(int,1,1) as ID, name into #y from #x
--SELECT * FROM #y
DECLARE @fPath VARCHAR(100)
SET @fPath = @fileP + '\'
SET @max1 = (SELECT max(ID) FROM #y)
While @count1 <= @max1
BEGIN
SET @count1=@count1+1
SET @filename = (SELECT name FROM #y WHERE [ID] = @count1)
SET @TableName = LEFT(@filename,len(@filename)-4)
-- 数据删除
DECLARE @delSql VARCHAR(100)
set @delSql='DELETE FROM '+ @DATABASENAME + '.dbo.' + @TableName + ' WHERE LEFT(orgId,4) = '+ @ORGID
ExEc(@delSql)
-- 数据导入
SET @query ='BULK INSERT '+ @DATABASENAME + '.dbo.' + @TableName + ' FROM "'+ @fPath + @filename+'" WITH ( FIELDTERMINATOR = '','',ROWTERMINATOR = ''\n'')'
print @query
print @count1
ExEc (@query)
END
DROP TABLE #y
DROP TABLE #x
SET @EX= 'ExEc master..xp_cmdshell ''rd '+@fileP+' /s/q''' -- 删除解压后的文件
ExEc (@EX)
-- ▲ =备份完成===========================================================================
-- ▼ 备份记录 ===========================================================================
EXEC('UPDATE '+ @DATABASENAME +'.dbo.com_duplicateRecord set restoretime = CONVERT(char(19), getdate(), 120) where id ='''+ @ID +'''')
-- ▲ 备份记录完成 =======================================================================
COMMIT TRANSACTION
END TRY
BEGIN CATCH
-- 发生错误
SET @RETVAL = '1'
ROLLBACK TRANSACTION
END CATCH
END
GO