小编Eoi*_*n O的帖子

而是触发器或计算列?哪个更好?

我想知道下面这两种方法之间是否有任何性能差异.基本上,问题是我们允许在id中使用空格和破折号,但某些遗留应用程序无法使用这些,因此它们被删除.据我所知,最好的方法是在触发器中或作为计算列.SQL如下所示(清理并匿名,如果出现错误就道歉)到目前为止,在我们的测试服务器上,两种方法之间似乎没有任何区别,其他人是否有任何输入?

[数据库SQL Server 2008] [查找表20000000行并且不断增长]

选项1 - 创建触发器

CREATE TRIGGER triMem_Lkup on Mem_Lkup
INSTEAD OF INSERT
AS
BEGIN
  INSERT INTO Mem_lkup
       SELECT ex_id, contact_gid, id_type_code, date_time_created,
              (replace(replace([ex_id],' ',''),'-','')) as ex_id_calc
       FROM inserted
END
GO
Run Code Online (Sandbox Code Playgroud)

与选项2对比 - 使用计算列

CREATE TABLE [dbo].[Mem_lkup](
    [mem_lkup_sid] [int] IDENTITY(1,1) NOT NULL,
    [ex_id] [varchar](18) NOT NULL,
    [contact_gid] [int] NOT NULL,
    [id_type_code] [char] (1) NOT NULL,
    [date_time_created] [datetime] NOT NULL,
    [ex_id_calc]  AS CAST( replace( replace([ex_id],' ','')  ,'-','')  AS varchar(18)) PERSISTED

    CONSTRAINT [PK_Mem_Lkup] PRIMARY KEY NONCLUSTERED 
(
    [mem_lkup_sid] ASC …
Run Code Online (Sandbox Code Playgroud)

sql triggers calculated-columns sql-server-2008

8
推荐指数
1
解决办法
3177
查看次数