SQL各业务大全

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

猜你喜欢

转载自blog.csdn.net/yan555888/article/details/88180384
今日推荐