2017-05-09 125 views
0

的缩短版我想要的是,当我插入一个字符串到A列中,较短的版本(最大117个字符)被插入到B列触发,都在同一个表。SQL Server的触发器,插入串

我将如何做到这一点使用SQL Server 2014?

+2

跳过触发,使用计算列,而不是! – jarlh

+0

在oracle中,我们有一些像子功能,看你是否有在SQL Server中的对应。 –

+1

不建议这样做,因为它会重复数据。较短的版本应在需要时在视图或存储过程中进行计算。 – cloudsafe

回答

5

在SQL Server 2014年,你并不需要一个触发,甚至是第二列存储数据。只需使用一个计算列:

alter table t add b as (left(a, 117)) 
+0

但这不是我要求的 – FastCow

+1

@FastCow,但是你问的是不是一个很好的方法来做到这一点。触发器是真正可怕的野兽,在现实世界中很少有用处。 –

+1

很抱歉不同意你的看法,但在金融领域,触发器被广泛用于控制和审计变更。他们是非常慢,然后计算列。 –

0

触发器是不可取的,但你可以使用这个

CREATE TRIGGER tx_Shorten 
ON [YourTable] 
AFTER Update, Insert 
AS 
BEGIN 
IF (SELECT [YourColumn2] FROM inserted) <> (SELECT [YourColumn2] FROM 
deleted) 
BEGIN 
UPDATE [YourTable] 
SET [YourColumn2] = (SELECT LEFT([YourColumn], 117)) 
FROM [YourTable] 
END 
END