例如:在一个表tblTest中有三个字段ID、Field1、Field2当我在更新Field1的值时希望Field2的值根据Field1的值变化。比如当Field1的值为2时,希望Field2的值自动加1。触发器我是这样写的:CREATE TRIGGER [trTest] ON [dbo].[tblTest]
FOR UPDATE
ASDECLARE @nField1 int
DECLARE @nField2 intBEGIN
IF UPDATE(Filed1)
BEGIN
SELECT @nField1 = f2 FROM tblTest
IF @nField1 = 2
BEGIN
SELECT @nField2 = Field2 FROM tblTest
SET @nField2 = @nField2 + 1
UPDATE tblTest SET Field2 = @nField2
END
END
END但是会将所有行的数据都更新。如何做到只更新当前行,如何定位到当前行呢?或者不使用触发器而使用什么约束,是否能达到预期的目的呢?
FOR UPDATE
ASDECLARE @nField1 int
DECLARE @nField2 intBEGIN
IF UPDATE(Filed1)
BEGIN
SELECT @nField1 = f2 FROM tblTest
IF @nField1 = 2
BEGIN
SELECT @nField2 = Field2 FROM tblTest
SET @nField2 = @nField2 + 1
UPDATE tblTest SET Field2 = @nField2
END
END
END但是会将所有行的数据都更新。如何做到只更新当前行,如何定位到当前行呢?或者不使用触发器而使用什么约束,是否能达到预期的目的呢?
解决方案 »
- 导入一个excel表格到sql2000时,总是生成两个表,结果 与 结果$,不知这两个表有何区别?
- log explorer 恢复遇到text类型问题
- 求存储过程中插入unicode字符串的方法
- 应用程序通SQL为什么连接不上!!!!
- sql server2005中无法进行远程访问
- 一个日期显示的问题
- 诸位大侠,Line 1: incorrect syntax near '!' 这句话什么意思啊?
- 求助:Microsoft SQL Server 2000服务不能启动
- 我写了SQL语句,大家帮忙分析分析,该做如何改进。含(显示预计的执行计划)图,不甚感激!
- 关于持久性的计算列的更新
- 可以对1和0组成的字符串进行与或运算吗?
- 【关注一下吧】详细情况进来看看吧。。。
for update
as
if update(Field1)
update ta
set Field2=Field2+1
from
inserted i
where
ta.id=i.id and i.Field1=2
你更新的时候实际上sqlserver是先删除旧值然后插入新值
新值保存在inserted表里面,所以你可以直接去inserted表里面取值你更新的时候想把Field2加1就要去找到这一列对应的id楼上 roy_88(中国风_燃烧你的激情!!!) 的例子就很好了