如何在触发器里实现2个功能。1表不存在就创建 2 用变量名当表名

itcoco 2014-05-19 03:47:16
我主要想实现这样的功能。 有一个表用来存放最新的一条记录 比如叫info_last(自增id,列1,列2,列3) 另外存放历史数据的表 是每月一个,比如5月份表名就叫history201405,放六月份的记录 就叫history201406。 历史表结构同info_last表。

我想在往info_last表里插入记录的时候,写个触发器,自动往当前月的历史表里同时插入一条数据。
我有大概的思路,就是触发器的时候 先检查当前历史表存在否 不存在 就创建。 另外就是创建表的时候 要根据当前时间确定表名,因为没有写过触发器,所以不太会写。 请哪位大仙指教一下 给个例子。

谢谢。
感觉是要用到动态sql。百度了下没有找到正确的能编译不报错的写法。 所以发帖求助下。
...全文
167 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
itcoco 2014-05-20
  • 打赏
  • 举报
回复
谢谢楼上2位。 按照 TravyLee 写了试试 估计语法错误 报错 我自己再调试调试。
  • 打赏
  • 举报
回复


create trigger tr_name 
on info_last
for insert
as
begin
declare @tbname varchar(20)
set @tbname='history'+replace(convert(varchar(5),getdate(),120),'-','')
--判断表是否存在

if object_id(@tbname) is not null
begin
	declare @str varchar(2000)
	set @str='insert '+'history'+replace(convert(varchar(5),getdate(),120),'-','')+
			' select * from info_last'
	exec @str
end 

else begin

	declare @str varchar(2000)
	set @str='create table '+'history'+replace(convert(varchar(5),getdate(),120),'-','')+
			'(id int identity(1,1),列1 varchar(20),列2 varchar(20),列3 varchar(20));
			insert '+'history'+replace(convert(varchar(5),getdate(),120),'-','')
			+' select * from info_last'
	exec @str
end
end
go
类似这样,其它的就看你了
hgwyl 2014-05-19
  • 打赏
  • 举报
回复
一、触发器——我不会。 二、遇到过类似的业务需求。 单表解决就好了。 日期作为聚集索引,其他若干条件作为非聚集索引。 这样在查询日期跨度大的时候,写SQL比较舒坦。 如果坚持用多表的形式,查询的日期跨度大,SQL语句得写死人。

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧