数据库中有一个字段为TimesTamp,我希望插入一个触发器可以自动插入TimesTamp。
TimesTamp的格式为nvchar(20),希望是一个由日期转换成的数字。
TimesTamp的格式:2014-1-1 10:20:30 就转换成 20140101102030。
如果这个TimesTamp在库中已经存在,则在最后+1 ,以上列为列值为 20140101102031
直至 这个TimesTamp 在数据库中保持唯一性。
10 个解决方案
#1
declare @TimesTamp varchar(20)
set @TimesTamp='2014-1-1 10:20:30'
set @TimesTamp=replace(@TimesTamp,':','')
set @TimesTamp=replace(@TimesTamp,'-1','01')
set @TimesTamp=replace(@TimesTamp,'-2','02')
set @TimesTamp=replace(@TimesTamp,'-3','03')
set @TimesTamp=replace(@TimesTamp,'-4','04')
set @TimesTamp=replace(@TimesTamp,'-5','05')
set @TimesTamp=replace(@TimesTamp,'-6','06')
set @TimesTamp=replace(@TimesTamp,'-7','07')
set @TimesTamp=replace(@TimesTamp,'-8','08')
set @TimesTamp=replace(@TimesTamp,'-9','09')
set @TimesTamp=replace(@TimesTamp,' ','')
if(@TimesTamp='20140101102030')
begin
set @TimesTamp= LTrim(cast (@TimesTamp as numeric(20,0))+1)
end
print @TimesTamp
#2
这个完全可以不用触发器 直接用函数或者过程就搞定了吧。
#3
大哥!!
TimesTamp 是将 now 转换成 一个数字的字符串。
然后判断 是否在库中存在。
您这一群的替换,是不是还忘记了 (:) ?
难道不是用 year,month,day,HHmmss 这个样子转换的?
begin
set @TimesTamp= LTrim(cast (@TimesTamp as numeric(20,0))+1)
end
不用现在数据库中找一下?
俺没搞过触发器这种东西,想学习一下,但这个不合逻辑吧。
TimesTamp 是将 now 转换成 一个数字的字符串。
然后判断 是否在库中存在。
您这一群的替换,是不是还忘记了 (:) ?
难道不是用 year,month,day,HHmmss 这个样子转换的?
begin
set @TimesTamp= LTrim(cast (@TimesTamp as numeric(20,0))+1)
end
不用现在数据库中找一下?
俺没搞过触发器这种东西,想学习一下,但这个不合逻辑吧。
#4
学习一下触发器嘛,
否则直接在程序中完成了,不用放在数据库里。
否则直接在程序中完成了,不用放在数据库里。
#5
提醒一下 LZ ,你这个逻辑欠佳。
2014-1-1 10:20:30 就转换成 20140101102030。
第一秒写入了 2 行数据
20140101102030 , 20140101102031
第二秒,再要写数据,这个号就被占用了。。。
2014-1-1 10:20:30 就转换成 20140101102030。
第一秒写入了 2 行数据
20140101102030 , 20140101102031
第二秒,再要写数据,这个号就被占用了。。。
#6
恩,其实没有写入,只是为了生成一个能转换回来的时间戳.
代码里可以完成,触发器不太会用.
代码里可以完成,触发器不太会用.
#7
奇怪的要求。
既然代码里能完成,直接复制到触发器中就行了,一样的。
既然代码里能完成,直接复制到触发器中就行了,一样的。
#8
不一样啊不一样,
我的代码是VB.NET 或者是C#
复制到SqlServer中大大地不能运行.
我的代码是VB.NET 或者是C#
复制到SqlServer中大大地不能运行.
#9
感觉你保存成字符串形式,还不如保存成 decimal(21, 12) 之类格式了
#10
create function [dbo].[dtdecimal](@datetime datetime)
returns nvarchar(20)
as
begin
declare @res nvarchar(20)
declare @tmp nvarchar(20)
set @res = convert(nvarchar(20), @datetime, 21)
set @res=replace(@res,'-','')
set @res=replace(@res,':','')
set @res=replace(@res,' ','')
set @res=replace(@res,'.','')
if (select @tmp = max(主键名) from 表 where 主键名 like ''@res'%''') is not null
set @res = @tmp + '1'
returns @res
end
#1
declare @TimesTamp varchar(20)
set @TimesTamp='2014-1-1 10:20:30'
set @TimesTamp=replace(@TimesTamp,':','')
set @TimesTamp=replace(@TimesTamp,'-1','01')
set @TimesTamp=replace(@TimesTamp,'-2','02')
set @TimesTamp=replace(@TimesTamp,'-3','03')
set @TimesTamp=replace(@TimesTamp,'-4','04')
set @TimesTamp=replace(@TimesTamp,'-5','05')
set @TimesTamp=replace(@TimesTamp,'-6','06')
set @TimesTamp=replace(@TimesTamp,'-7','07')
set @TimesTamp=replace(@TimesTamp,'-8','08')
set @TimesTamp=replace(@TimesTamp,'-9','09')
set @TimesTamp=replace(@TimesTamp,' ','')
if(@TimesTamp='20140101102030')
begin
set @TimesTamp= LTrim(cast (@TimesTamp as numeric(20,0))+1)
end
print @TimesTamp
#2
这个完全可以不用触发器 直接用函数或者过程就搞定了吧。
#3
大哥!!
TimesTamp 是将 now 转换成 一个数字的字符串。
然后判断 是否在库中存在。
您这一群的替换,是不是还忘记了 (:) ?
难道不是用 year,month,day,HHmmss 这个样子转换的?
begin
set @TimesTamp= LTrim(cast (@TimesTamp as numeric(20,0))+1)
end
不用现在数据库中找一下?
俺没搞过触发器这种东西,想学习一下,但这个不合逻辑吧。
TimesTamp 是将 now 转换成 一个数字的字符串。
然后判断 是否在库中存在。
您这一群的替换,是不是还忘记了 (:) ?
难道不是用 year,month,day,HHmmss 这个样子转换的?
begin
set @TimesTamp= LTrim(cast (@TimesTamp as numeric(20,0))+1)
end
不用现在数据库中找一下?
俺没搞过触发器这种东西,想学习一下,但这个不合逻辑吧。
#4
学习一下触发器嘛,
否则直接在程序中完成了,不用放在数据库里。
否则直接在程序中完成了,不用放在数据库里。
#5
提醒一下 LZ ,你这个逻辑欠佳。
2014-1-1 10:20:30 就转换成 20140101102030。
第一秒写入了 2 行数据
20140101102030 , 20140101102031
第二秒,再要写数据,这个号就被占用了。。。
2014-1-1 10:20:30 就转换成 20140101102030。
第一秒写入了 2 行数据
20140101102030 , 20140101102031
第二秒,再要写数据,这个号就被占用了。。。
#6
恩,其实没有写入,只是为了生成一个能转换回来的时间戳.
代码里可以完成,触发器不太会用.
代码里可以完成,触发器不太会用.
#7
奇怪的要求。
既然代码里能完成,直接复制到触发器中就行了,一样的。
既然代码里能完成,直接复制到触发器中就行了,一样的。
#8
不一样啊不一样,
我的代码是VB.NET 或者是C#
复制到SqlServer中大大地不能运行.
我的代码是VB.NET 或者是C#
复制到SqlServer中大大地不能运行.
#9
感觉你保存成字符串形式,还不如保存成 decimal(21, 12) 之类格式了
#10
create function [dbo].[dtdecimal](@datetime datetime)
returns nvarchar(20)
as
begin
declare @res nvarchar(20)
declare @tmp nvarchar(20)
set @res = convert(nvarchar(20), @datetime, 21)
set @res=replace(@res,'-','')
set @res=replace(@res,':','')
set @res=replace(@res,' ','')
set @res=replace(@res,'.','')
if (select @tmp = max(主键名) from 表 where 主键名 like ''@res'%''') is not null
set @res = @tmp + '1'
returns @res
end