Корпорація Майкрософт поширює Microsoft SQL Server 2005 або Microsoft SQL Server 2008 або SQL 2008 R2, як один файл для завантаження. Оскільки виправлення є сукупними, у кожному новому випуску містяться всі виправлення та всі виправлення системи безпеки, які були включені до попередньої версії Microsoft SQL Server 2005 або Microsoft SQL Server 2008 або SQL 2008 R2 Fix Release

Ознаки

Припустимо, що ви запускаєте запит в екземплярі Microsoft SQL Server 2005 або Microsoft SQL Server 2008 або Microsoft SQL Server 2008 R2, що відповідає таким умовам:

  • Запит містить реляційний оператор. Наприклад, якщо оператор "менше" (<);

  • Функція DateDiff використовується в операнд реляційного оператора.

У цій ситуації SQL Server може вибрати план, який можна виконати, щоб запустити цей запит. Таким чином, запит може виконуватися повільно.

Причина

Ця проблема виникає через те, що оптимізатор SQL Server не обчислює кількість рядків, які повертаються під час використання функції DateDiff .

Спосіб вирішення

Відомості про Сукупне оновлення

SQL Server 2005 із пакетом оновлень 3

Виправлення для цієї проблеми уперше випущено в сукупному оновленні 15 для SQL Server 2005 Service Pack 3. Щоб отримати докладні відомості про цей пакет накопичувальне оновлення, клацніть номер статті в базі знань Microsoft Knowledge Base:

2507766 Сукупний пакет оновлень пакета 15 для SQL Server 2005 Service Pack 3Примітка. Оскільки будує сукупну версію, кожен новий випуск Fix містить всі виправлення та виправлення безпеки, які були включені до попередньої версії SQL Server 2005 Fix Release. Корпорація Майкрософт рекомендує застосувати найновішу версію виправлення, що містить це виправлення. Щоб отримати докладні відомості, клацніть номер цієї статті бази знань Microsoft:

960598 Інстальовано пакет оновлення SQL Server 2005, який було випущено після випуску пакета оновлень 3 для SQL Server 2005 Поточні виправлення Microsoft SQL Server 2005 створюються для певних пакетів оновлень для сервера SQL Server. Щоб інсталювати пакет оновлень 3 для SQL Server 2005, потрібно додати пакет оновлень 3 для SQL Server 2005. За замовчуванням будь-яке термінове виправлення, яке надається в пакеті оновлень SQL Server, включено до наступного пакета оновлень служби SQL Server.

SQL Server 2005 із пакетом оновлень 4

Виправлення для цієї проблеми уперше випущено в сукупному оновленні 2 для SQL Server 2005 Service Pack 4. Щоб отримати докладні відомості про цей пакет накопичувальне оновлення, клацніть номер статті в базі знань Microsoft Knowledge Base:

2489409 Сукупний пакет оновлень пакета 2 для SQL Server 2005 Service Pack 4Примітка. Оскільки будує сукупну версію, кожен новий випуск Fix містить всі виправлення та виправлення безпеки, які були включені до попередньої версії SQL Server 2005 Fix Release. Корпорація Майкрософт рекомендує застосувати найновішу версію виправлення, що містить це виправлення. Щоб отримати докладні відомості, клацніть номер цієї статті бази знань Microsoft:

2485757 Випущено SQL Server 2005, який було випущено після випуску служби SQL Server 2005 Service Pack 4 Поточні виправлення Microsoft SQL Server 2005 створюються для певних пакетів оновлень для сервера SQL Server. Щоб інсталювати пакет оновлень 4 для SQL Server 2005, потрібно додати пакет оновлень 4 для SQL Server 2005. За замовчуванням будь-яке термінове виправлення, яке надається в пакеті оновлень SQL Server, включено до наступного пакета оновлень служби SQL Server.

SQL Server 2008 із пакетом оновлень 1

Виправлення для цієї проблеми уперше випущено в сукупному оновленні 13 для SQL Server 2008 Service Pack 1. Щоб отримати докладні відомості про цей пакет накопичувальне оновлення, клацніть номер статті в базі знань Microsoft Knowledge Base:

2497673 Сукупний пакет оновлень пакета 13 для SQL Server 2008 Service Pack 1Примітка. Оскільки будує сукупну версію, кожен новий випуск Fix містить всі виправлення та виправлення безпеки, які були включені до попередньої версії SQL Server 2008 Fix Release. Корпорація Майкрософт рекомендує застосувати найновішу версію виправлення, що містить це виправлення. Щоб отримати докладні відомості, клацніть номер цієї статті бази знань Microsoft:

970365 Випущено SQL Server 2008, що випущено після випуску пакета оновлень 1 (SP1) для SQL Server 2008 Поточні виправлення Microsoft SQL Server 2008 створюються для певних пакетів оновлень для сервера SQL Server. Щоб інсталювати пакет оновлень 1 (SP1) для SQL Server 2008, потрібно виконати термінове виправлення в SQL Server 2008 Service Pack 1. За замовчуванням будь-яке термінове виправлення, яке надається в пакеті оновлень SQL Server, включено до наступного пакета оновлень служби SQL Server.

SQL Server 2008 із пакетом оновлень 2

Виправлення для цієї проблеми уперше випущено в сукупному оновленні 3 для SQL Server 2008 Service Pack 2. Щоб отримати докладні відомості про цей пакет накопичувальне оновлення, клацніть номер статті в базі знань Microsoft Knowledge Base:

2498535 Сукупний пакет оновлень пакета 3 для SQL Server 2008 Service Pack 2Примітка. Оскільки будує сукупну версію, кожен новий випуск Fix містить всі виправлення та виправлення безпеки, які були включені до попередньої версії SQL Server 2008 Fix Release. Корпорація Майкрософт рекомендує застосувати найновішу версію виправлення, що містить це виправлення. Щоб отримати докладні відомості, клацніть номер цієї статті бази знань Microsoft:

2402659 Інстальовано пакет оновлення SQL Server 2008, який було випущено після випуску служби SQL Server 2008 Service Pack 2 Поточні виправлення Microsoft SQL Server 2008 створюються для певних пакетів оновлень для сервера SQL Server. Щоб інсталювати пакет оновлень 2 для SQL Server 2008, потрібно додати пакет оновлень 2 для SQL Server 2008. За замовчуванням будь-яке термінове виправлення, яке надається в пакеті оновлень SQL Server, включено до наступного пакета оновлень служби SQL Server.

SQL Server 2008 R2 Service Pack 1

Виправлення для цієї проблеми уперше випущено в сукупному оновленні 1 для SQL Server 2008 R2 Service Pack 1. Щоб отримати докладні відомості про отримання цього сукупного оновлення пакета, клацніть цей номер статті, щоб переглянути статтю в базі знань Microsoft Knowledge Base:

2544793 Сукупний пакет оновлень пакета 1 для SQL Server 2008 R2 Service Pack 1Примітка. Оскільки будує сукупну версію, кожен новий випуск Fix містить всі виправлення та виправлення безпеки, які були включені до попередньої версії SQL Server 2008 R2 Fix Release. Радимо застосувати найновішу версію виправлення, що містить це виправлення. Щоб отримати докладні відомості, клацніть номер цієї статті бази знань Microsoft:

2567616 Випущено пакет оновлень 1 для SQL Server 2008 R2, випущеній після випуску SQL Server 2008 R2 Service SP1

SQL Server 2008 R2

Виправлення для цієї проблеми уперше випущено в сукупному оновленні 7. Щоб отримати докладні відомості про отримання цього сукупного оновлення пакета для SQL Server 2008 R2, клацніть цей номер статті, щоб переглянути статтю в базі знань Microsoft Knowledge Base:

2507770 Сукупний пакет оновлень пакета 7 для SQL Server 2008 R2 Примітка. Оскільки будує сукупну версію, кожен новий випуск Fix містить всі виправлення та виправлення безпеки, які були включені до попередньої версії SQL Server 2008 R2 Fix Release. Радимо застосувати найновішу версію виправлення, що містить це виправлення. Щоб отримати докладні відомості, клацніть номер цієї статті бази знань Microsoft:

981356 Випущено SQL Server 2008 R2, випущеній після випуску SQL Server 2008 R2

Стан

Корпорація Майкрософт підтвердила, що це проблема в продуктах Microsoft, перелічених у розділі "застосовується до".

Інші способи вирішення

Щоб вирішити цю проблему, Перепишіть запит, щоб план запиту не використовував функцію DateDiff у предикаті. Наприклад, такі дії можуть повільно виконуватися:create procedure proc_test @date datetimeasselect COUNT (*) from t where c1 <DATEADD(mm, DATEDIFF(mm,0,dateadd(month, -6,@date)), 0) Однак, щоб вирішити цю проблему, можна переписати запит.create procedure proc_test2 @date datetimeasdeclare @datestr nvarchar(50), @sqlstr nvarchar(1024)set @datestr = CAST (DATEADD(mm, DATEDIFF(mm,0,dateadd(month, -6,@date)), 0) as nvarchar(50))set @sqlstr ='select COUNT (*) from t where c1 < ''' + @datestr + ''''exec (@sqlstr)

Посилання

Щоб отримати докладні відомості про модель інкрементного обслуговування для SQL Server, клацніть цей номер статті, щоб переглянути статтю в базі знань Microsoft Knowledge Base:

935897 Модель інкрементного обслуговування доступна з команди SQL Server, щоб доставити виправлення для повідомляли про проблемиЩоб отримати докладні відомості про схему іменування для оновлень SQL Server, клацніть цей номер статті, щоб переглянути статтю в базі знань Microsoft Knowledge Base:

822499 Нова схема іменування для пакетів оновлень програмного забезпечення Microsoft SQL ServerЩоб отримати докладніші відомості про термінологію оновлення програмного забезпечення, клацніть номер статті в базі знань Microsoft Knowledge Base:

824684 Опис стандартної термінології, яка використовується для опису оновлень програмного забезпечення Microsoft

Потрібна додаткова довідка?

Отримуйте нові функції раніше за інших

Приєднатися до Microsoft оцінювачів >

Ця інформація корисна?

Наскільки ви задоволені якістю мови?
Що вплинуло на ваші враження?

Дякуємо за відгук!

×