尝试从链接服务器插入时

尝试从链接服务器插入时

本文介绍了尝试从链接服务器插入时,当前命令发生严重错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 SQL Server 2008 SP3 并尝试从链接服务器插入大约 200K 行,但一段时间后我收到此错误:

I'm working with SQL Server 2008 SP3 and trying to insert about 200K rows from a linked server but, after a while I get this error:

A severe error occurred on the current command.  The results, if any, should be discarded.

发生此错误:

  • 几乎总是如此,但有时效果很好.
  • 当 SELECT 仅限于 TOP(10) 时不会.
  • 有时当我执行 SELECT 连接到本地表时.

我检查过的东西:

  • 我可以在没有 JOIN 的情况下从链接服务器获取所有行.
  • 在本地和链接服务器上的所有数据库中完成 CHECKDB,没有错误.
  • 本地和链接服务器上所有磁盘中的 CHKDSK,没有错误.

这是目标表:

CREATE TABLE [dbo].[TargetTable](
    [ProdID] [varchar](40) NOT NULL,
    [Download] [bigint] NULL,
    [ImageID] [varchar](200) NULL,
    [ImageWeight] [int] NULL,
    [ImageWidth] [int] NULL,
    [ImageHeight] [int] NULL,
    [ImageAngle] [varchar](200) NOT NULL,
    [MfPN] [varchar](40) NOT NULL,
    [ContentGuid] [varchar](200) NOT NULL,
    [MediaTypeID] [int] NOT NULL,
    [MimeType] [varchar](50) NOT NULL,
    [URL] [varchar](500) NOT NULL,
    [Timestamp] [datetime] NULL,
    [_DateLastUpdated] [datetime] NULL
) ON [PRIMARY];

这是我用来插入的查询

INSERT INTO [dbo].[TargetTable]
(
    [ProdID],
    [Download],
    [ImageID],
    [ImageWeight],
    [ImageWidth],
    [ImageHeight],
    [ImageAngle],
    [MfPN],
    [ContentGuid],
    [MediaTypeID],
    [MimeType],
    [URL],
    [Timestamp],
    [_DateLastUpdated]
)
SELECT
    i.ProdID
    ,i.Download
    ,i.ImageID
    ,i.ImageWeight
    ,i.ImageWidth
    ,i.ImageHeight
    ,i.ImageAngle
    ,i.MfPN
    ,i.ContentGuid
    ,i.MediaTypeID
    ,i.MimeType
    ,i.[Url]
    ,i.[Timestamp]
    ,i._DateLastUpdated

FROM [LinkedServer].[Database].[dbo].[view_Source] i WITH(NOLOCK)
    LEFT JOIN [LocalDatabase].[dbo].[TargetTable] t WITH(NOLOCK)
        ON i.ContentGuid = t.ContentGuid AND i.ProdID= t.ProdID
WHERE
    t.ContentGuid IS NULL

感谢您的帮助!

推荐答案

在不使用锁的情况下尝试读取也在更改的数据时,可能会发生这种情况.删除 WITH(NOLOCK) 表提示.

This can occur when trying to read data that is also changing, without using a lock. Remove the WITH(NOLOCK) table hint.

即使底层数据没有变化,读取未提交的数据也是有风险的,而且不推荐:

Even when the underlying data is not changing, reading uncommitted data is risky, and not recommended:

使用 NOLOCK,您可以:

  • 查看两次行
  • 完全跳过行
  • 查看从未提交的数据
  • 并让您的查询因错误而失败
  • 如果您对此很满意,那就太好了 - NOLOCK 适合您.

这篇关于尝试从链接服务器插入时,当前命令发生严重错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-13 22:53