使用 Microsoft 登录
登录或创建帐户。
你好,
使用其他帐户。
你有多个帐户
选择要登录的帐户。

症状

使用函数或SCOPE_IDENTITY () @@IDENTITY检索插入到标识 列中的值时,可能会注意到这些函数有时返回错误值。 只有当查询使用并行执行计划时,该问题才出现。 若要详细了解如何确定查询是否将使用并行执行计划,请参阅以下有关 Microsoft 下载的技术文章中的查询内并行性部分:

原因

Microsoft 已确认这是本文开头列出的 Microsoft 产品中的问题。

解决方法

累积更新信息

SQL Server 2008 R2 Service Pack 1

此问题的修补程序首次在 2008 R2 Service Pack 1 SQL Server累积更新 5 中发布。 若要详细了解如何获取此累积更新包,请单击以下文章编号,查看 Microsoft 知识库中的文章: 

26596942008 R2 Service Pack 1 SQL Server更新包 5

备注 由于内部版本是累积的,因此每个新的修补程序版本都包含以前的 SQL Server 2008 R2 修补程序版本中包含的所有修补程序和所有安全修补程序。 我们建议你考虑应用包含此修补程序的最新修补程序版本。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

25676162008 SQL Server 2008 R2 Service Pack 1 SQL Server发布的 2008 R2 内部版本

解决方法

当涉及并行计划时,Microsoft 建议在查询中不要使用这些函数之一,因为它们并不总是可靠。 而是使用 INSERT 语句的 OUTPUT 子句检索标识值,如以下示例所示。

使用 OUTPUT 子句的示例:

DECLARE @MyNewIdentityValues 表 (myidvalues int)
声明@A表 (ID int 主键
) 插入 @A 值 (1)
声明@B id (id int 主键标识 (1,1) ,B int not null
) 插入到 @B 值 (1)
选择
    [RowCount] = @@RowCount,
    [@@IDENTITY] = @@IDENTITY,
    [SCOPE_IDENTITY] = SCOPE_IDENTITY ()

在 上设置统计信息配置文件
插入到_ddr_T
输出 inserted.ID 到@MyNewIdentityValues
    选择
            
b.ID         从 @A a
            左联接 @B b on b.ID = 1
            左侧联接@B b2 上的 b2。B = -1

            t.T 上_ddr_T左联接 t = -1

        如果不存在 (请选择 t2 _ddr_T *,其中 t2.ID = -1
) 关闭统计信息配置文件

选择
    [RowCount] = @@RowCount,
    [@@IDENTITY] = @@IDENTITY,
    [SCOPE_IDENTITY] = SCOPE_IDENTITY () ,
    [IDENT_CURRENT] = IDENT_CURRENT ('_ddr_T')
从@MyNewIdentityValues
go

如果情况需要使用这些函数之一,可以使用以下方法之一来解决此问题。

方法 1:

在查询中包括以下选项

OPTION (MAXDOP 1)

注意:这可能会损害查询的 SELECT 部分的性能。

方法 2:

将 SELECT 部分的值读入一组变量 (或单个表变量) 然后插入 MAXDOP=1 的目标表中。 由于 INSERT 计划不会是并行的,因此将获取正确的语义,但 SELECT 将并行实现所需的性能。

方法 3:

运行以下语句,将最大并行度 选项设置为 1:

sp_configure"最大并行度",1

go

使用 override 重新配置

go

注意:此方法可能会导致服务器性能下降。 除非在测试或过渡环境中评估过此方法,否则不应使用此方法。

更多信息

此问题的 Microsoft Connect

MAXDOP (的最大并行)https://msdn.microsoft.com/en-us/library/ms181007.aspx

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。

此信息是否有帮助?

你对语言质量的满意程度如何?
哪些因素影响了你的体验?
按“提交”即表示你的反馈将用于改进 Microsoft 产品和服务。 你的 IT 管理员将能够收集此数据。 隐私声明。

谢谢您的反馈!

×