sp_BlitzIndex - “无法将 null 值插入列 'index_sanity_id'...”

Bil*_*ill 2 sql-server sp-blitzindex

嗨,我在我的一台测试服务器上从最新版本的 sp_BlitzIndex 收到此错误消息:

数据库处理失败。无法将值 NULL 插入列“index_sanity_id”、表“tempdb.dbo.#IndexSanitySize_____________________________________________________________________________________00000002626F”;列不允许空值。插入失败。

Bre*_*zar 7

在 sp_BlitzIndex 运行的同时添加或删除索引时,通常会发生这种情况。例如,如果您的代码在用户数据库中动态添加/删除表,则会触发此操作。此处跟踪了 Github 问题。

要测试该理论,请尝试在最终用户活动较低的情况下再次运行 sp_BlitzIndex,或者将同一数据库恢复到另一台没有活动的服务器。(当然,这不会让您获得索引利用率数据,但它会证明理论。)

如果即使服务器上没有任何活动仍然出现错误(再次恢复到不同的服务器,以便您可以确定),那么我们需要逐步执行代码以了解数据库上的哪些类型的索引触发了错误. 修改T-SQL的这部分就可以看到了:

    CREATE TABLE #IndexSanity
        (
          [index_sanity_id] INT IDENTITY PRIMARY KEY,
Run Code Online (Sandbox Code Playgroud)

将其更改为:

    CREATE TABLE #IndexSanity
        (
          [index_sanity_id] INT IDENTITY NULL,
Run Code Online (Sandbox Code Playgroud)

然后在过程结束时:

    SELECT * FROM #IndexSanity WHERE index_sanity_id IS NULL
Run Code Online (Sandbox Code Playgroud)

这样你就可以看到哪些索引触发了错误,我们可以弄清楚如何将它们排除在检查之外。

我在 Github 中创建了一个问题来跟踪它并在下一个版本中修复它:

sp_BlitzIndex - 填充 #IndexSanitySize 时出现空错误