SQLServer使用总结记录

增加自增字段
alter table 表名 add 列名 int IDENTITY(1,1) NOT NULL

计算时间差

可以使用datediff函数计算两个时间之间的差值

DATEDIFF ( date-part, date-expression-1, date-expression-2 )

date-part:返回的时间差单位,有下列可选值

year | quarter | month | week | day | hour | minute | second | millisecond

date-expression-1:作为减数的时间

date-expression-2:作为被减数的时间

函数会以date-part为单位返回date-expression-2减去date-expression-1的时间差。

计算当前时间和’2018-08-10 10:31:01.000’的时间差,以分钟返回:

select DATEDIFF(MINUTE,'2018-08-10 10:31:01.000',GETDATE());

获取当前时间

GETDATE()


删除对象然后重新创建
--表
IF (EXISTS(SELECT * FROM sysobjects WHERE id=object_id(N'[dbo].[T_B_Class_Push]') AND OBJECTPROPERTY(id, N'IsTable') = 1))
	DROP table T_B_Class_Push
go
--触发器
IF (EXISTS(SELECT * FROM sysobjects WHERE id=object_id(N'[dbo].[tg_dept_udpate]') AND OBJECTPROPERTY(id, N'IsTrigger') = 1))
	DROP TRIGGER tg_dept_udpate
go
--存储过程
if exists (select * from dbo.sysobjects where (name = 'UP_Egs_InsertCardRec') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
  drop procedure UP_Egs_InsertCardRec
go

使用游标
	declare @bcode varchar(50)
	declare @code varchar(50)
	-- 取出需要的数据放进临时表
	select code into #tb_temp_dept from tb_temp_dept
	-- 使用游标从临时表中获取数据
	declare dept_cursor cursor for 
		(select code from #tb_temp_dept)
	open dept_cursor -- 打开游标
	fetch next from dept_cursor into @code -- 获取一条数据
	while @@FETCH_STATUS = 0 -- FETCH_STATUS为0说明获取到了数据
	begin
		-- 业务操作
		set @bcode = @code
		PRINT '1:' + @bcode
		declare @index int
		set @index = LEN(@bcode)/4
		while @index > 0
		begin
			set @code = stuff(@code,@index*4-3,1,'*')
			set @index = @index -1
		end
		set @code = REPLACE(@code, '*', '')
		PRINT '2:' + @code
		update tb_temp_dept set code = @code where code = @bcode
		fetch next from dept_cursor into @code -- 再次获取一条数据
	end
	close dept_cursor -- 关闭游标
	deallocate dept_cursor -- 释放游标
	drop table #tb_temp_dept -- 删除临时表

注意

  • 这里之所以先将数据存放到了临时表,再使用游标获取,是因为sqlserver的游标在使用过程中如果原表数据发生了变化,它会再次获取到变化了的数据,不清楚这是bug还是有意为之,但是在使用中会影响我所需要的数据,所以一定要先存放至临时表
-- 取出需要的数据放进临时表
select code into #tb_temp_dept from tb_temp_dept
-- 使用游标从临时表中获取数据
declare dept_cursor cursor for (select code from #tb_temp_dept)

你可能感兴趣的:(数据库)