KB2380361 - ИСПРАВЛЕНО: Сообщение об ошибке при выполнении хранимой процедуры "sp_createstats" в SQL Server 2008 или SQL Server 2008 R2, если таблица содержит недетерминированный вычисляемый столбец

Применяется к
SQL Server 2008 Enterprise SQL Server 2008 Developer SQL Server 2008 Standard SQL Server 2008 Standard Edition for Small Business SQL Server 2008 Workgroup SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard SQL Server 2008 R2 Workgroup SQL Server 2008 R2 Standard Edition for Small Business

Корпорация Майкрософт распространяет исправления Microsoft SQL Server 2008 и Microsoft SQL Server 2008 R2 в виде одного загружаемого файла. Поскольку исправления являются накопительными, каждый новый выпуск содержит все исправления и исправления для системы безопасности, которые были включены в предыдущий выпуск исправлений SQL Server 2008 или SQL Server 2008 R2.

Проблема

Рассмотрим следующий сценарий.

  • Вы создаете таблицу, содержащую недетерминированный вычисляемый столбец в базе данных SQL Server 2008 или SQL Server 2008 R2. Например, чтобы создать таблицу, содержащую недетерминированный вычисляемый столбец, выполните следующую инструкцию: CREATE TABLE [dbo]. [Т1](
            [ДатаРождения] ДАТА,
            [Возраст] AS (FLOOR(DATEDIFF(DAY,[DateOfBirth],GETDATE())/(365.0))))GO Примечание В этом операторе функция GETDATE является недетерминированной.

  • Хранимая процедура sp_createstats выполняется для повышения производительности.

    Примечание. Хранимая процедура sp_createstats создает статистику с одним столбцом для всех подходящих столбцов базы данных

В этом случае хранимая процедура sp_createstats завершается сбоем. Поэтому статистика для некоторых подходящих столбцов могла не быть создана. Кроме того, появляется следующее сообщение об ошибке:

Примечание

MSG 2729, уровень 16, состояние 1, строка 1

Столбец "Возраст" в таблице "dbo.t1" нельзя использовать в индексе, статистике или в качестве ключа секции, так как он не детерминирован.

Причина

Эта проблема возникает из-за того, что хранимая процедура sp_createstats не пропускает недетерминированные вычисляемые столбцы.

Решение

Сведения о накопительном пакете обновления

SQL Server 2008 с пакетом обновления 1 (SP1)

Исправление для этой проблемы было впервые выпущено в накопительном пакете обновления 11 для SQL Server 2008 с пакетом обновления 1. Дополнительные сведения об этом накопительном пакете обновления см. в следующей статье базы знаний Майкрософт:

2413738 Накопительный пакет обновления 11 для SQL Server 2008 с пакетом обновления 1 (SP1)
Примечание. Поскольку сборки являются накопительными, каждый новый выпуск исправления содержит все исправления и исправления безопасности, которые были включены в предыдущий выпуск исправления SQL Server 2008. Корпорация Майкрософт рекомендует рассмотреть возможность применения последнего выпуска исправления, содержащего это исправление. Для просмотра статьи в базе знаний Майкрософт щелкните следующий номер статьи:

970365 Сборки SQL Server 2008, выпущенные после выпуска пакета обновления 1 для SQL Server 2008. Исправления Microsoft SQL Server 2008 предназначены для определенных пакетов обновления SQL Server. Необходимо применить исправление пакета обновления 1 для SQL Server 2008 с пакетом обновления 1 (SP1) для установки SQL Server 2008 с пакетом обновления 1. По умолчанию все исправления, предоставляемые в пакете обновления для SQL Server, входят в следующий пакет обновления для SQL Server.

SQL Server 2008 с пакетом обновления 2 (SP2)

Исправление для этой проблемы было впервые выпущено в накопительном пакете обновления 1 для SQL Server 2008 с пакетом обновления 2. Дополнительные сведения об этом накопительном пакете обновления см. в следующей статье базы знаний Майкрософт:

2289254 Накопительный пакет обновления 1 для SQL Server 2008 с пакетом обновления 2 (SP2) Так как сборки являются накопительными, каждый новый выпуск исправления содержит все исправления и исправления безопасности, которые были включены в предыдущий выпуск исправления для SQL Server 2008. Рекомендуется рассмотреть возможность применения последнего выпуска исправления, содержащего это исправление. Для просмотра статьи в базе знаний Майкрософт щелкните следующий номер статьи:

2402659 сборки SQL Server 2008, выпущенные после выпуска пакета обновления 2 (SP2) для SQL Server 2008.

SQL Server 2008 с пакетом обновления 2 (SP2)

Исправление для этой проблемы впервые было выпущено в накопительном пакете обновления 2 для SQL Server 2008 с пакетом обновления 2. Дополнительные сведения об этом накопительном пакете обновления см. в следующей статье базы знаний Майкрософт:

2467239 Накопительный пакет обновления 2 для SQL Server 2008 с пакетом обновления 2 (SP2). Так как сборки являются накопительными, каждый новый выпуск исправления содержит все исправления и исправления для системы безопасности, которые входили в состав предыдущего выпуска исправления для SQL Server 2008. Корпорация Майкрософт рекомендует рассмотреть возможность применения последнего выпуска исправления, содержащего это исправление. Для просмотра статьи в базе знаний Майкрософт щелкните следующий номер статьи:

2402659 сборках SQL Server 2008, выпущенных после выпуска пакета обновления 2 (SP2) для SQL Server 2008, созданы исправления для определенных пакетов обновления SQL Server. Установите исправление пакета обновления 2 для SQL Server 2008 с пакетом обновления 2 (SP2) для установки SQL Server 2008 с пакетом обновления 2. По умолчанию все исправления, предоставляемые в пакете обновления для SQL Server, входят в следующий пакет обновления для SQL Server.

SQL Server 2008 R2

Исправление для этой проблемы впервые выпущено в накопительном пакете обновления 4. Дополнительные сведения о том, как получить этот накопительный пакет обновления для SQL Server 2008 R2, см. в следующей статье базы знаний Майкрософт:

Накопительный пакет обновления 4 2345451 для SQL Server 2008 R2 Примечание. Поскольку сборки являются накопительными, каждый новый выпуск исправления содержит все исправления и исправления безопасности, которые были включены в предыдущий выпуск исправления SQL Server 2008 R2. Рекомендуется рассмотреть возможность применения последнего выпуска исправления, содержащего это исправление. Для просмотра статьи в базе знаний Майкрософт щелкните следующий номер статьи:

981356 сборки SQL Server 2008 R2, выпущенные после выхода SQL Server 2008 R2

Состояние

Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».

Ссылки

Дополнительные сведения о детерминированных и недетерминированных функциях см. на следующем веб-сайте сети Microsoft Developer Network (MSDN):

Общие сведения о детерминированных и недетерминированных функциях Дополнительные сведения о хранимой процедуре sp_createstats см. на следующем веб-сайте MSDN:

Общие сведения о хранимой процедуре Transact-SQL "sp_createstats" Дополнительные сведения о вычисляемых столбцах см. на следующем веб-сайте MSDN:

Общие сведения о вычисляемых столбцах Дополнительные сведения о модели добавочного обслуживания для SQL Server см. в следующей статье базы знаний Майкрософт:

935897 Команда SQL Server предоставляет модель добавочного обслуживания для предоставления исправлений для обнаруженных проблем

Дополнительные сведения о схеме именования для обновлений SQL Server см. в следующей статье базы знаний Майкрософт:

822499 Новая схема именования пакетов обновления программного обеспечения Microsoft SQL ServerДополнительные сведения о терминологии обновления программного обеспечения см. в следующей статье базы знаний Майкрософт:

824684 Стандартные термины, используемые при описании обновлений программного обеспечения Майкрософт