#sql #azure #azure-sql-database
#sql #azure #azure-sql-database
Вопрос:
Я получаю странную ошибку при экспорте базы данных SQL Azure. Экспорт работал нормально до некоторых недавних изменений схемы, но теперь выдает ошибку SQL71501.
База данных имеет версию 12, уровень совместимости 130 (хотя master
база данных по-прежнему имеет уровень совместимости 120).
Проблема, по-видимому, вызвана новой табличной функцией, которая использует встроенную STRING_SPLIT
функцию. Уже использовались хранимые процедуры STRING_SPLIT
, и они, похоже, не повлияли на экспорт, но функция (которая компилируется нормально и работает нормально), похоже, вызывает проблему с экспортом.
Приведенная ниже функция является упрощенной версией реальной, но вызывает ту же проблему.
CREATE FUNCTION [dbo].[TestFunction](
@CommaSeparatedValues VARCHAR(MAX)
)
RETURNS TABLE
AS
RETURN
SELECT c.ClientId,
c.FullName
FROM dbo.Client c
INNER JOIN STRING_SPLIT(@CommaSeparatedValues, ',') csv
ON c.ClientId = csv.value
Полное сообщение об ошибке, приведенное в разделе журнала импорта / экспорта, выглядит следующим образом:
Ошибка, возникшая во время работы службы.
В схеме, используемой как часть пакета данных, был обнаружен один или несколько неподдерживаемых элементов.
Ошибка SQL71501: ошибка элемента проверки [dbo].[testFunction]: Функция: [dbo].[testFunction] имеет неразрешенную ссылку на объект [dbo].[STRING_SPLIT].
Ошибка SQL71501: ошибка элемента проверки [dbo].[testFunction]: Функция: [dbo].[testFunction] содержит неразрешенную ссылку на объект. Либо объект не существует, либо ссылка неоднозначна, поскольку она может ссылаться на любой из следующих объектов: [dbo].[Клиент].[csv], [dbo].[STRING_SPLIT].[csv] или [dbo].[STRING_SPLIT].[значение].
Ответ №1:
Это Xiaochen из Microsoft SQL team. Мы уже работаем над устранением этой проблемы. Исправление будет развернуто в службе экспорта в ближайшие несколько недель. В то же время исправление уже доступно в последней версии DacFx 16.4 (https://blogs.msdn.microsoft.com/ssdt/2016/09/20/sql-server-data-tools-16-4-release /). Прежде чем мы исправим эту проблему в службе, вы можете загрузить DacFx 16.4 и использовать sqlpackage для обхода.
Ответ №2:
SQLAzure проверяет схему, ссылки на объекты при экспорте базы данных, если какая-либо из ссылок не выполняется, как показано ниже в вашем случае
Ошибка SQL71501: ошибка элемента проверки [dbo].[testFunction]: Функция: [dbo].[testFunction] имеет неразрешенную ссылку на объект [dbo].[STRING_SPLIT].
экспорт не будет выполнен успешно..Поэтому вам нужно будет устранить эти ошибки перед экспортом..
Из документации вам нужно будет установить уровень совместимости на 130
Функция STRING_SPLIT доступна только на уровне совместимости 130. Если уровень совместимости вашей базы данных ниже 130, SQL Server не сможет найти и выполнить функцию STRING_SPLIT
Обновить:
Я смог повторить ту же проблему, и единственным текущим обходным путем является удаление функции с табличным значением, которая ссылается на системную функцию и экспортирует DACPAC, после завершения экспорта воссоздайте функцию с табличным значением: (
Я поднял проблему здесь: пожалуйста, поддержите..
Комментарии:
1. В этом проблема — в этой функции нет ничего недопустимого! Он компилируется и работает просто отлично. STRING_SPLIT — это встроенная системная функция, поэтому я не понимаю, почему процесс экспорта жалуется на это.
2. Уровень совместимости уже равен 130, и функция STRING_SPLIT уже некоторое время работает нормально в куче сохраненных процедур.
3. Я попытаюсь повторить, как только у меня будет доступ сегодня
4. Спасибо @TheGameiswar. Все, что я сделал для воспроизведения, это добавил функцию, которую я упомянул в вопросе, а затем выполнил экспорт.
5. @JonathanSayce: я смог повторить то же самое, см. Обновление для workaroubd
Ответ №3:
Помощник по миграции данных сделал это за меня. Сначала запустите оценку схемы, при успешном завершении запустите миграцию https://www.microsoft.com/en-us/download/details.aspx?id=53595 /