sqlserver 中 触发器的写法

--   插入时执行触发器

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
create trigger [dbo].[rscOpenInsert]
on [dbo].[RSC_INFO]
for insert
as
DECLARE
@v_rscID varchar(50),
@v_status int
begin
    select @v_rscID=rscID,@v_status=status from inserted;
    --取得当前资源信息status>4 才插入信息
 if @v_status > 4
   begin
    insert into RSC_OPEN_SYNCHRONOUS(rscID,opStatus,opDateTime) values (@v_rscID,'insert',getDate())
   end
end

--- 更新时执行触发器

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
create trigger [dbo].[rscOpenUpdate]
on [dbo].[RSC_INFO]
for update
as
DECLARE
@v_rscID varchar(50),
@v_status int
begin
    select @v_rscID=rscID,@v_status=status from inserted;
    --取得当前资源信息status>4 才更新信息
if @v_status > 4
   begin
     update RSC_OPEN_SYNCHRONOUS set opStatus = 'update', opDateTime = getDate() where rscID=@v_rscID
   end
end

 SQLServer中的“SET ANSI_NULLS ON”和“SET QUOTED_IDENTIFIER ON”有什么实际的用处?

这些是 SQL-92 设置语句,使 SQL Server 2000/2005 遵从 SQL-92 规则。
当 SET QUOTED_IDENTIFIER 为 ON 时,标识符可以由双引号分隔,而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时,标识符不可加引号,且必须符合所有 Transact-SQL 标识符规则。
SQL-92 标准要求在对空值进行等于 (=) 或不等于 (<>) 比较时取值为 FALSE。当 SET ANSI_NULLS 为 ON 时,即使 column_name 中包含空值,使用 WHERE column_name = NULL 的 SELECT 语句仍返回零行。即使 column_name 中包含非空值,使用 WHERE column_name <> NULL 的 SELECT 语句仍会返回零行。
当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于 (<>) 比较运算符不遵从 SQL-92 标准。使用 WHERE column_name = NULL 的 SELECT 语句返回 column_name 中包含空值的行。使用 WHERE column_name <> NULL 的 SELECT 语句返回列中包含非空值的行。此外,使用 WHERE column_name <> XYZ_value 的 SELECT 语句返回所有不为 XYZ_value 也不为 NULL 的行。

猜你喜欢

转载自jackroomage.iteye.com/blog/1669138
今日推荐