为什么透过链接服务器写入,速度会很慢
为什么透过链接服务器写入,速度会很慢
原因是 通过链接服务器写入时,是逐行写入数据库,逐行insert,触发触发器等等
,写入的数据有几行,就触发几次触发器,inserted,deleted等系统表每次只有一行数据
如果是同一台服务器插入的时,一个sql命令是批量插入的,只触发一个触发器,inserted,deleted会有多行数据
测试用例:
建表:
CREATE TABLE [dbo].[TEST_BATINSERT](
[PLUCODE] [varchar](20) NULL,
[SCANCODE] [varchar](20) NULL
) ON [PRIMARY]
建触发器:
CREATE TRIGGER [dbo].TEST_BATINSERT_INSERT
ON [dbo]. [TEST_BATINSERT]
FOR INSERT
AS
BEGIN
IF UPDATE (plucode)
BEGIN
IF (select len( ltrim(rtrim (plucode))) from inserted ) > 2--这种写法当isnerted只有一行数据时,可以执行通过,有多行数据时,语法不正确,会报错
BEGIN
IF isnumeric ((select ltrim(rtrim (plucode)) from inserted )) = 1
BEGIN
SELECT 1
END
END
END
END
测试语句
语句1
INSERT TEST_BATINSERT( PLUCODE,SCANCODE )
SELECT TOP 1 PLUCODE,SCANCODE
FROM TEST_BATINSERT_1
测试结果,没问题,说明触发器中的inserted语句只有一行数据
语句2
INSERT TEST_BATINSERT( PLUCODE,SCANCODE )
SELECT TOP 2 PLUCODE,SCANCODE
FROM TEST_BATINSERT_1
测试结果:不正常。说明触发器中的inserted语句有多行数据
在另外一台服务器上执行:
语句1
INSERT [LNKSER]. LNKDB.dbo .TEST_BATINSERT( PLUCODE,SCANCODE )
SELECT TOP 1 productNo,productNo
FROM [TEST_BATINSERT_1]
测试结果,没问题,说明触发器中的inserted语句只有一行数据
语句2
INSERT [LNKSER]. LNKDB.dbo .TEST_BATINSERT( PLUCODE,SCANCODE )
SELECT TOP 2 productNo,productNo
FROM TEST_BATINSERT_1
测试结果,没问题,说明触发器中的inserted语句只有一行数据
结论:如果要进行跨服务器交换数据,尽量用链接服务器进行读操作,避免进行写和删的操作。