sql server 2005 设置一个列等于另外俩个列的值

create table test(
id int primary key,
c1 varchar(10) not null,
c2 varchar(22), c3 varchar(22),
c4 varchar(2) )
表结构如上:现要求:
列c4 的值等于c3-c2的值。注(c2、c3值为日期,算两个日期之间相差的小时数)不要说触发器实现什么的。我知道触发器能实现,关键是怎么写?
____________________________________________ 我写的触发器。我一修改就c2和c3的值就报错

create trigger date_diff
on
test
for insert,update
as
if update(c3)
begin update test set c4 = datediff(minute,c2,c3)/60 end
if update(c2) begin update test set c4= datediff(minute,c2,c3)/60 end

create trigger date_diff
on
test
after update
as
begin
if update(c3)
begin
 update test set c4 = cast(datediff(hour,c2,c3) as varchar) 
end
if update(c2)
begin
 update test set c4= cast(datediff(hour,c2,c3) as varchar) 
end
end

追问

不行,还是报错

追答

我怀疑是你表的数据问题 第7行 有个值是 '12345-12-31' 转换为DateTime肯定是异常的啊
datetime 的范围不能超过 9999年

追问


这个就是 C2 和C3的值

追答

2013-11-31 哪有这样的日期 11月最多只用30天

温馨提示:内容为网友见解,仅供参考
无其他回答

sql server 2005 设置一个列等于另外俩个列的值
create trigger date_diffontestafter updateasbeginif update(c3)begin update test set c4 = cast(datediff(hour,c2,c3) as varchar) endif update(c2)begin update test set c4= cast(datediff(hour,c2,c3) as varchar) endend

sql server 2005查询一个表中两列值相等的sql语句怎么写?
或者select * from A A1 INNER JOIN A A2 ON A1.列1=A2.列2

在SQL Server2005 数据库中如果让一列的值等于前几列的和应该用什么实现...
update 表明 set 列名=列名+列名

在SQL Server 2005中,当一张表中已经设置主键,怎样给这张表的其他字段...
创建唯一约束可确保在不参与主键的特定列中不输入重复值。当唯一约束和主键都强制唯一性时,如果满足下列条件,则应将唯一约束而不是主键约束附加到表上:1.希望在列或列的组合中强制唯一性。可将多个唯一约束附加到表,但是只能将一个主键约束附加到表。2.希望在允许空值的列中强制唯一性。可将唯一约...

sql server 2005 一个字段模糊查询匹配多个值
select * from tb where sjsid like '%,[4,11],%'

SQL2005中如何让一行的结果集分成2列显示,一列显示字段名,一列...
如果不是为了实用,仅仅是一道Sql的考题(除非是考试,否则大多数实用场景,这么做都是不好的设计),那么,你可以使用Sqlserver2005新增加的 UNPIVOT 语法(具体请查帮助手册,unpivot )但要注意,在老的sqlserver或者其他数据库都是不支持的,只能是sqlserver.如果你希望这个方法还可以在其他数据库系统使用,可以用...

sql server 2005 提示 Cursorfetch: INTO 列表中声明的变量数目必须与...
从语法的角度解释你的错误原因就是:你的select查询显示的是三列内容(name,start,info),但是你在向cursor中填充数据集时只填充了两列(Fetch next From cursor1 into @name,@start),当然会报错了。修改方法,要么查询去掉info,要么在Fetch时加上一列@info ...

sql server 2005代码错误 提示插入错误: 列名或所提供值的数目与表...
将SQL语句修改为这样:insert into [表名](列1,列2,列3,...)values (值1,值2,值3,...)你的这句话提示就是说,你现在插入到表里的列数与数据库里的数目不一致造成的。严格意义上来说,你图片里的这种插入方式是绝对不允许在生产环境中出现的。我们单位就不允许这样做 ...

SQLSERVER2005 将A表的一列内容全部写入B表的一列怎么办,在线等...
insert into B表 (列名)select 列名 from A表 绝对符合你的意思,复制粘贴过去,替换掉表名和列名就行

SQL2005中建表时如何把一个属性设置为自增长?
属性2 数据类型,自增长属性 INT IDENTITY(1,1));在上述SQL语句中,`新表名称`代表您要创建的新表的名称,`属性1`和`属性2`代表其他非自增长属性,`自增长属性`为需要设置为自增长的属性名,并指定其数据类型为`INT`。`IDENTITY(1,1)`部分定义了自增长的起始值和步长,`1`表示起始值,`1`...

相似回答