MS SQL 触发器问题 你都没有条件,肯定update 所有的.update test set 年龄=年龄+1where 姓名 in select 姓名 from inserted 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CREATE TABLE [test] ( [id] [int] IDENTITY (1, 1) NOT NULL , [姓名] [varchar] (8) COLLATE Chinese_PRC_CI_AS NULL , [年龄] [int] NULL , CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED ( [id] ))GOCREATE TABLE [tests] ( [id] [int] , [姓名] [varchar] (8) COLLATE Chinese_PRC_CI_AS NULL , [年龄] [int] NULL , CONSTRAINT [PK_tests] PRIMARY KEY CLUSTERED ( [id] ), FOREIGN KEY (FK_ID) REFERENCES test (id) )GOCREATE TRIGGER testtri ON dbo.test FOR UPDATE ASupdate tests set 姓名=inserted.姓名, 年龄=inserted.年龄 from inserted where tests.id=inserted.idgo 大力大大,可以不用ID这个字段吗?为什么用tests.姓名=deleted.姓名不行呢? 在test表上建触发器[code]CREATE TRIGGER testtri ON dbo.test FOR UPDATE ASupdate tests set 姓名=inserted.姓名, 年龄=inserted.年龄from tests,deleted,insertedwhere tests.姓名=inserted.姓名[/code]就行了,因为update test set 年龄=年龄+1执行之后表deleted内容如下:张三 1李四 2王五 3赵六 4表inserted内容如下:张三 2李四 3王五 4赵六 5 where tests.姓名=inserted.姓名?但是如果我update了姓名的值的话这样就会出错呀? CREATE TRIGGER testtri ON dbo.test FOR UPDATE ASupdate tests set 姓名=inserted.姓名, 年龄=inserted.年龄from tests,insertedwhere tests.姓名=inserted.姓名 为什么 chenqinzeng(chenqinzeng) 和 happy_0325(快乐) 都要使用 “where tests.姓名=inserted.姓名”呢如果这样写的话,执行update test set 姓名=姓名 + '人'的话,就不对了 这个也是很容易的,编写触发器的时候deleted是存放删除掉的记录和修改过旧的记录,而inserted是存放新增加的数据和修改过新的数据,这下你应该可以自己搞定了吧 这个SQL语句看起来没错,可是编辑器总是报错 我发个字符截取的帖子, 菜鸟请教一个问题 2道基础sql题求解.. 比较菜的一个问题,SQL连接 很纠结的一道高手会~新手不会的SQL问题…… 我该用什么来开发网络版的工资系统? Vista Home Basic sp1安装Microsoft SQL Server 2005 请教创建的视图里怎样使用ORDER BY排序? 声明一个cursor时,for后边可以是一个变量码?请教,急!!!!!! 如何导入数据 这样是SQL 语句不支持中文吗?
[id] [int] IDENTITY (1, 1) NOT NULL ,
[姓名] [varchar] (8) COLLATE Chinese_PRC_CI_AS NULL ,
[年龄] [int] NULL ,
CONSTRAINT [PK_test] PRIMARY KEY CLUSTERED
(
[id]
)
)
GOCREATE TABLE [tests] (
[id] [int] ,
[姓名] [varchar] (8) COLLATE Chinese_PRC_CI_AS NULL ,
[年龄] [int] NULL ,
CONSTRAINT [PK_tests] PRIMARY KEY CLUSTERED
(
[id]
),
FOREIGN KEY (FK_ID) REFERENCES test (id)
)
GOCREATE TRIGGER testtri ON dbo.test
FOR UPDATE
AS
update tests set 姓名=inserted.姓名, 年龄=inserted.年龄 from inserted where tests.id=inserted.id
go
为什么用tests.姓名=deleted.姓名不行呢?
[code]
CREATE TRIGGER testtri ON dbo.test
FOR UPDATE
AS
update tests set
姓名=inserted.姓名,
年龄=inserted.年龄
from tests,deleted,inserted
where tests.姓名=inserted.姓名
[/code]就行了,因为update test set 年龄=年龄+1执行之后
表deleted内容如下:
张三 1
李四 2
王五 3
赵六 4
表inserted内容如下:
张三 2
李四 3
王五 4
赵六 5
?
但是如果我update了姓名的值的话这样就会出错呀?
FOR UPDATE
AS
update tests set
姓名=inserted.姓名,
年龄=inserted.年龄
from tests,inserted
where tests.姓名=inserted.姓名