Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Pivot и совместимость версий  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
Пытаюсь выполнить следующий код:
DECLARE @T TABLE
(
	Noms	INT,
	Name	VARCHAR(200)
)
INSERT INTO @T(Noms,Name)
VALUES (123, 'Москва')
INSERT INTO @T(Noms,Name)
VALUES (123, 'Туапсе')
INSERT INTO @T(Noms,Name)
VALUES (256, 'Москва')
INSERT INTO @T(Noms,Name)
VALUES (256, 'Львов')

SELECT Noms,	[1],	[2],	[3],	[4]
FROM 
(	SELECT 
		Noms,		Name,
		ROW_NUMBER() OVER (PARTITION BY Noms ORDER BY Noms) as Rn
	FROM @T
) as s
PIVOT
(
	MIN(Name)
	FOR Rn IN ([1],[2],[3],[4])
) as p


Мой сервер выдаёт вот такое сообщение:
Сообщение 325, уровень 15, состояние 1, строка 30
Incorrect syntax near 'PIVOT'. You may need to set the compatibility level of the current database to a higher value to enable this feature. See help for the stored procedure sp_dbcmptlevel.


по гуглил на счёт процедуры sp_dbcmptlevel, запустил её, он мне выдал вот такое:
Valid values of the database compatibility level are 60, 65, 70, 80, or 90.


Результат выполнения select @@version:
Microsoft SQL Server 2005 - 9.00.5000.00 (X64)   Dec 10 2010 10:38:40   Copyright (c) 1988-2005 Microsoft Corporation  Standard Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1) 


как мне запустить первый запрос, что бы он работал?
10 ноя 16, 12:45    [19878753]     Ответить | Цитировать Сообщить модератору
 Re: Pivot и совместимость версий  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
RMagistr2015,

ну так а установлен какой?
SELECT compatibility_level  
FROM sys.databases WHERE name = DB_NAME(DB_ID())
10 ноя 16, 12:50    [19878772]     Ответить | Цитировать Сообщить модератору
 Re: Pivot и совместимость версий  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
TaPaK
RMagistr2015,

ну так а установлен какой?
SELECT compatibility_level  
FROM sys.databases WHERE name = DB_NAME(DB_ID())


80
10 ноя 16, 12:51    [19878780]     Ответить | Цитировать Сообщить модератору
 Re: Pivot и совместимость версий  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
RMagistr2015,

ну так поставьте 90
10 ноя 16, 12:53    [19878784]     Ответить | Цитировать Сообщить модератору
 Re: Pivot и совместимость версий  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
TaPaK
RMagistr2015,

ну так поставьте 90


А это не нарушит режим работы всех остальных процедур и функций, работающих в данный момент?
10 ноя 16, 12:54    [19878794]     Ответить | Цитировать Сообщить модератору
 Re: Pivot и совместимость версий  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
RMagistr2015
TaPaK
RMagistr2015,

ну так поставьте 90


А это не нарушит режим работы всех остальных процедур и функций, работающих в данный момент?

ну прям в рабочее время не стоит и если вы поставили при миграции(скорее всего) 80 то может оно вам и надо, хотя что там за различия я уже не помню... может кто знает про конкретные проблемы
10 ноя 16, 13:02    [19878836]     Ответить | Цитировать Сообщить модератору
 Re: Pivot и совместимость версий  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
тут различия, читайте думайте, проверяйте :)
https://technet.microsoft.com/en-us/library/bb510680(SQL.100).aspx
10 ноя 16, 13:04    [19878846]     Ответить | Цитировать Сообщить модератору
 Re: Pivot и совместимость версий  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 942
Можно менять версию у PROD базы - "рядом" создать базу для такого рода "совместимости".
10 ноя 16, 15:30    [19879754]     Ответить | Цитировать Сообщить модератору
 Re: Pivot и совместимость версий  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 942
Руслан Дамирович
Можно НЕ менять версию у PROD базы - "рядом" создать базу для такого рода "совместимости".

XXI век, вебдваноль уже скоро будет заменен вебтриноль, а на sql.ru все еще нельзя редактировать сообщения.
10 ноя 16, 15:32    [19879768]     Ответить | Цитировать Сообщить модератору
 Re: Pivot и совместимость версий  [new]
o-o
Guest
TaPaK
что там за различия я уже не помню... может кто знает про конкретные проблемы

ну там минимум доисторические внешние джойны не взлетят, типа *= и =*
10 ноя 16, 15:39    [19879813]     Ответить | Цитировать Сообщить модератору
 Re: Pivot и совместимость версий  [new]
ziktuw
Member

Откуда:
Сообщений: 3552
Данную проблему можно обойти, сменив контекст базы.

Для этого смените @T на #T, заменив соответственно создание и наполнение. А запрос с PIVOT выполните в контексте другой базы, с нормальным уровнем совместимости 90, например в master или tempdb:

EXEC tempdb..sp_executesql N'....ваш запрос с PIVOT....'
13 ноя 16, 17:19    [19888251]     Ответить | Цитировать Сообщить модератору
 Re: Pivot и совместимость версий  [new]
RMagistr2015
Member

Откуда:
Сообщений: 1389
ziktuw
Данную проблему можно обойти, сменив контекст базы.

Для этого смените @T на #T, заменив соответственно создание и наполнение. А запрос с PIVOT выполните в контексте другой базы, с нормальным уровнем совместимости 90, например в master или tempdb:

EXEC tempdb..sp_executesql N'....ваш запрос с PIVOT....'


Прикольное решение ))))
13 ноя 16, 18:40    [19888384]     Ответить | Цитировать Сообщить модератору
 Re: Pivot и совместимость версий  [new]
ziktuw
Member

Откуда:
Сообщений: 3552
RMagistr2015,

Мне в недавнем прошлом пришлось так делать, когда сервер 2005, а в базе выставлена совместимость 80 по требованию вендора установленной системы.

Там кроме PIVOT еще одна засада есть. OUTER APPLY в принципе выполняется в базе с уровнем 80, но значение поля в параметр табличной функции запихнуть нельзя. Тоже приходилось контекст базы подменять таким хаком.
13 ноя 16, 18:59    [19888410]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить