2015-02-20 3 views
0

Я выполняю миграцию некоторых баз данных с SQL Server 2000 на SQL Server 2008.Не удается разрешить конфликт сортировки для замены операции

У меня есть одна БД, которую нужно переместить. Я скопировал его в 2008 году для тестирования.

Но я получаю следующую ошибку сортировки, когда я пытаюсь запустить этот запрос от клиента 2008 обратно в базу данных 2000

SELECT * 
FROM Ports.dbo.vwAppeals 

дает

Msg 446, уровень 16, состояние 8 , Строка 1
Невозможно разрешить конфликт сортировки для замены операции.

Если я запускаю тот же запрос - от клиента 2008 до сервера 2008 года, то есть на переносимой копии, он возвращает ожидаемые данные без ошибок.

Это немного медленнее, чем я ожидал.

vwAppeals объекта представляет собой вид, и я проверил параметры сортировки для каждого поля на каждом из базовых таблиц, не найдя ничего другого, кроме < базы данных по умолчанию > в SQL Server 2000 Enterprise Manager. Когда я проверяю в SQL Server Management Studio на 2008 копии с использованием этого

SELECT 
    col.name, col.id, col.xtype, col.collation 
FROM 
    Ports.dbo.syscolumns col 
WHERE 
    id IN (SELECT [id] 
      FROM [Ports].[dbo].[sysobjects] 
      WHERE name = '<name_of_underlying_table>') 
    AND collation IS NOT NULL 

все параметры сортировки одинаковы

Любая идея, что может быть причиной этой ошибки?

+0

Просмотрите этот https://msdn.microsoft.com/en-us/library/bb510680(v=sql.110).aspx – Paparazzi

+0

Знаете ли вы, что ошибка определенно связана с представлением, то есть вид на самом деле использовать функцию замены? –

+0

«SELECT * FROM Ports.dbo.vwAppeals WHERE 1 = 0' work, т. Е. Возвращает пустой набор результатов? Если это так, то, по крайней мере, вы знаете, что ошибка возникает во время оценки выражения, а не во внешнем процессе. –

ответ

0

Вы уверены, что не существует основной функции, которая может повлиять на это? Не можете ли вы постепенно перестроить представление для устранения неполадок и определения источника конфликта?

+0

ОК. Поэтому я сделал это. Там было несколько функций REPLACE(), которые я переписал как UDF, используя подстроку, charindex и patindex, и теперь я получаю это: Msg 446, Level 16, State 8, Line 2 Не удается разрешить конфликт сортировки для операции подстроки. поэтому я думаю, что я на правильной линии. Но это происходит только тогда, когда я работаю с клиентом 2008 года. Я не получаю ошибку, когда я работаю локально на сервере Win2K. Поэтому, похоже, это связано с некоторой разницей между операционными платформами. – Feargal

+0

Итак, я удалил один из UDF и избавился от связанного вычисленного поля. Я могу рассчитать его позже, если потребуется, но на самом деле это было для поддержки унаследованного продукта, который мы больше не поддерживаем, поэтому я думаю, что он больше не понадобится. Но проблема все еще остается. Думаю, мне нужно удалить другой UDF в качестве теста. – Feargal

+0

ОК. Найден преступник. UDF были на самом деле прекрасны.Но есть еще одно вычисленное поле подстроки - SUBSTRING (CAST (1000000 + ports.PIUID AS varchar (7)), 2, 6) AS UniqueIDString - чья функция заключалась в создании 6-символьного нумерованного строкового представления небольшого поля PIUID , Об этом жалуется SQL Server 2008. Любые предложения относительно того, почему? – Feargal

Смежные вопросы