【发布时间】:2014-10-09 12:40:44
【问题描述】:
我在 SQL Server 2008 R2 中有一个包含 1000 多条记录的表。有一个 SharePoint 2010 界面,用户可以实时更新此表的行,并且有一个字段 (CLASS) 应在更新一或两列(COUNTRY_REASON 或/和 VENDOR_REASON)时计算。
我正在考虑在更新时创建一个 AFTER UPDATE 触发器,但我想知道它是否不会进入某种循环?
有没有比使用触发器更好的方法来执行此更新?您有什么意见/建议?
CREATE TRIGGER [dbo].[TRG_NOSSCE_UPDATE_CLASS]
ON [TO_BDB].[dbo].[to_bdb_nossce_comm_act]
after UPDATE
AS
BEGIN
UPDATE [TO_BDB].[dbo].[to_bdb_nossce_comm_act]
SET class = CASE
WHEN ( country_reason = '' OR country_reason IS NULL )
AND ( vendor_reason = '' OR vendor_reason IS NULL )
THEN 'NOT CLASSIFIED'
WHEN country_reason = 'Vendor_Issue'
AND ( vendor_reason = '' OR vendor_reason IS NULL )
THEN 'SITE ISSUE'
WHEN country_reason = 'Vendor_Issue'
OR country_reason = ''
OR country_reason IS NULL
THEN (
CASE
WHEN vendor_reason IN ( 'Site Product Quality', 'Site QA Release' )
THEN 'SITE QUALITY'
WHEN vendor_reason = 'Customer Order Management'
THEN 'CPO SCM'
WHEN vendor_reason LIKE 'Other%' THEN 'OTHER REASON'
ELSE 'SITE SCM'
END
)
ELSE (
CASE
WHEN country_reason IN ( 'Local Product Quality',
'Local QA Release'
)
THEN 'CPO QUALITY'
WHEN country_reason IN ( 'Customs Clearance',
'Transport Damage',
'Transport Issue' )
THEN 'TRANSIT'
WHEN country_reason IN (
'Artwork', 'Complaince Checks',
'Registration',
'Safety Label Changes' )
THEN 'CPO LCM'
WHEN country_reason = 'Vendor_Issue'
THEN ''
WHEN country_reason LIKE 'Other%'
THEN 'OTHER REASON'
ELSE 'CPO SCM'
END
)
END
WHERE class = ''
OR class IS NULL
AND Len(comment) > 0
END
go
【问题讨论】:
标签: sql sql-server sql-server-2008 triggers sql-update