我有一张名为dbo.PBXDATA
的表格。我想设置一个触发器,如果列SALES_REP的值等于特定值(int),则将该值更改为Table列中sales_rep的名称。以下是我到目前为止的情况。任何提示都会很棒。谢谢。
CREATE TRIGGER dbo.PBXDATA_trgIUD_sales_rep
ON dbo.PBXDATA
AFTER INSERT,UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT CAST(WHEN SALES_REP = '101'
THEN 'Ryan Kosterow'
ELSE 'NULL'
END as NVARCHAR) FROM dbo.PBXDATA
SELECT CAST(WHEN SALES_REP = '115'
THEN 'Robert Messing'
ELSE 'NULL'
END as NVARCHAR) FROM dbo.PBXDATA
SELECT CAST(WHEN SALES_REP = '114'
THEN 'Paul Clark'
ELSE 'NULL'
END as NVARCHAR) FROM dbo.PBXDATA
SELECT CAST(WHEN SALES_REP = '110'
THEN 'Aaron Townsley'
ELSE 'NULL'
END as NVARCHAR) FROM dbo.PBXDATA
END
GO
答案 0 :(得分:0)
我认为您打算执行UPDATE
操作,而不是SELECT
。同样,您实际上是在尝试使用CASE
表达式,而您当前的语法CAST(WHEN SALES_REP = '101' ...
是错误的。您可以尝试如下:
UPDATE dbo.PBXDATA SET SALES_REP = CASE WHEN SALES_REP = '101' THEN 'Ryan Kosterow'
WHEN SALES_REP = '115' THEN 'Robert Messing'
WHEN SALES_REP = '114' THEN 'Paul Clark'
WHEN SALES_REP = '110' THEN 'Aaron Townsley'
ELSE 'NULL' END
答案 1 :(得分:-1)
您可以使用特殊的inserted
表来执行更新。该表将在触发器中可用,并将包含正在更新的行。这可能是代码:
update inserted
set SALES_REP = 'Ryan Kosterow'
where SALES_REP = '101'
update inserted
set SALES_REP = 'Robert Messing'
where SALES_REP = '115'
update inserted
set SALES_REP = 'Paul Clerk'
where SALES_REP = '114'
update inserted
set SALES_REP = 'Aaron Townsley'
where SALES_REP = '110'
答案 2 :(得分:-1)
这是一个糟糕的设计。你真的应该有一个SALES_REP_NAMES表,当你需要一个输出名称的查询时,你可以加入到PBXDATA表。它看起来像
waitForNextLevel
你可以做的事情比如:
SALES_REP_ID NAME
------------ ----------------
110 Aaron Townsley
etc...
但是,如果你真的想通过TRIGGER这样做,它应该如下所示。 请注意,它通过检查TRIGGER是否需要进行更新来避免递归嵌套。
SELECT
*
FROM
PBXDATA P
JOIN SALES_REP_NAMES N
ON P.SALES_REP = N.SALES_REP_ID