ALTER ASSEMBLY (Transact-SQL)

Изменяет сборку, изменяя при этом свойства каталога SQL Server сборки. Инструкция ALTER ASSEMBLY обновляет ее до последней копии модулей Microsoft .NET Framework, содержащих ее реализацию, и добавляет или удаляет связанные с ней файлы. Сборки создаются при помощи инструкции CREATE ASSEMBLY.

Применимо для следующих объектов: SQL Server (начиная с SQL Server 2008 до текущей версии).

Значок ссылки на раздел Cинтаксические обозначения в Transact-SQL

Синтаксис

ALTER ASSEMBLY assembly_name
    [ FROM <client_assembly_specifier> | <assembly_bits> ]
    [ WITH <assembly_option> [ ,...n ] ]
    [ DROP FILE { file_name [ ,...n ] | ALL } ]
    [ ADD FILE FROM 
    { 
                client_file_specifier [ AS file_name ] 
      | file_bits AS file_name 
    } [,...n ] 
    ] [ ; ]
<client_assembly_specifier> :: = 
        '\\computer_name\share-name\[path\]manifest_file_name'
  | '[local_path\]manifest_file_name' 

<assembly_bits> :: =
    { varbinary_literal | varbinary_expression }

<assembly_option> :: =
    PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE } 
  | VISIBILITY = { ON | OFF }
  | UNCHECKED DATA

Аргументы

  • assembly_name
    Имя сборки, которую нужно изменить. Каталог assembly_name уже должен существовать в базе данных.

  • FROM <client_assembly_specifier> | <assembly_bits>
    Обновляет сборку до последней копии модулей платформы .NET Framework, содержащих ее реализацию. Этот параметр может использоваться при условии, что файлы, связанные с указанной сборкой, отсутствуют.

    Аргумент <client_assembly_specifier> указывает сетевое или локальное расположение, в котором находится обновляемая сборка. Сетевое расположение содержит имя компьютера, имя общей папки и путь внутри этой папки. Аргумент manifest_file_name указывает имя файла, содержащего манифест сборки.

    Аргумент <assembly_bits> является двоичным значением для сборки.

    Для зависимых сборок, также нуждающихся в обновлении, должны выполняться отдельные инструкции ALTER ASSEMBLY.

    Примечание

    Этот параметр недоступен в автономной базе данных.

  • PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }
    Указывает для сборки свойство набора разрешений на доступ к коду .NET Framework. Дополнительные сведения об этом свойстве см. в разделе CREATE ASSEMBLY (Transact-SQL).

    Примечание

    Параметры EXTERNAL_ACCESS и UNSAFE недоступны в автономной базе данных.

  • VISIBILITY = { ON | OFF }
    Указывает, видима ли сборка для создания на ее основе функций среды CLR, хранимых процедур, триггеров, определяемых пользователем типов и определяемых пользователем агрегатных функций. При установке OFF сборка может быть вызвана только при помощи других сборок. Если имеются объекты базы данных среды CLR, уже созданные с помощью сборки, ее видимость не может быть изменена. Сборки, на которые ссылается аргумент assembly_name, передаются по умолчанию как невидимые.

  • UNCHECKED DATA
    По умолчанию инструкция ALTER ASSEMBLY не выполняется в том случае, если она должна проверять согласованность отдельных строк таблицы. Этот параметр позволяет впоследствии провести позже при помощи инструкции DBCC CHECKTABLE. Если данный параметр указан, SQL Server выполняет инструкцию ALTER ASSEMBLY даже в случае, если в базе данных имеются таблицы, содержащие:

    • материализованные вычисляемые столбцы, которые непосредственно или косвенно ссылаются на методы в сборке при помощи функций или методов языка Transact-SQL;

    • ограничения CHECK, которые непосредственно или косвенно ссылаются на методы в сборке;

    • столбцы определяемого пользователем типа данных CLR, зависящего от сборки, и типа данных, реализующего пользовательский (UserDefined, а не Native) формат сериализации;

    • столбцы определяемого пользователем типа данных CLR, ссылающиеся на представления, созданные при помощи ключевого слова WITH SCHEMABINDING.

    Любые имеющиеся ограничения CHECK отключаются и помечаются как ненадежные. Таблицы, содержащие столбцы, зависящие от сборки, помечаются как содержащие непроверенные данные, и сохраняют эту метку до тех пор, пока не будут проверены явно.

    Указывать этот параметр могут только члены предопределенных ролей db_owner и db_ddlowner базы данных.

    Дополнительные сведения см. в разделе Реализация сборок.

  • [ DROP FILE { file_name[ ,...n] | ALL } ]
    Удаляет из базы данных файл, связанный со сборкой, или все файлы, связанные со сборкой. Если следующей является инструкция ADD FILE, инструкция DROP FILE выполняется в первую очередь. Это позволяет заменить файл другим файлом с тем же именем.

    Примечание

    Этот параметр недоступен в автономной базе данных.

  • [ ADD FILE FROM { client_file_specifier [ AS file_name] | file_bitsAS file_name}
    Передает на сервер файлы для связывания со сборкой (например, исходные файлы, файлы отладки или другие сведения) и делает их видимыми в представлении каталога sys.assembly_files. client_file_specifier указывает расположение, откуда передаются файлы. Вместо этого можно указать список двоичных значений, составляющих файл, с помощью file_bits. file_name указывает имя, под которым файл должен храниться на экземпляре SQL Server. Аргумент file_name необходимо обязательно указывать при наличии аргумента file_bits и необязательно при наличии client_file_specifier. Если параметр file_name не указан, часть file_name аргумента client_file_specifier используется в качестве аргумента file_name.

    Примечание

    Этот параметр недоступен в автономной базе данных.

Замечания

Инструкция ALTER ASSEMBLY не нарушает сеансы, в которых в настоящий момент работает код изменяемой сборки. Текущие сеансы завершают выполнение с неизмененной сборкой.

Если указывается предложение FROM, инструкция ALTER ASSEMBLY обновляет сборку в соответствии с последними предоставленными копиями модулей. Так как в экземпляре SQL Server могут быть функции среды CLR, хранимые процедуры, триггеры, типы данных и пользовательские агрегатные функции, уже использующие сборку, инструкция ALTER ASSEMBLY привязывает их к последней реализации сборки. Для выполнения этой привязки в измененной сборке должны существовать методы с подписями, с которыми сопоставлены функции CLR, хранимые процедуры и триггеры. Классы, реализующие определяемые пользователем типы данных CLR и пользовательские агрегатные функции, должны удовлетворять требованиям для определяемых пользователем типов или агрегатных функций.

Предупреждение

Если параметр WITH UNCHECKED DATA не указан, SQL Server предпринимает попытку не допустить исполнения инструкции ALTER ASSEMBLY, если сборка новой версии изменит существующие данные в табличных, индексных или других сохраняемых страницах.Однако при обновлении сборки в среде CLR SQL Server не обеспечивает согласованности вычисляемых столбцов, указателей, индексированных представлений или выражений с базовыми процедурами или типами.Выполняйте инструкции ALTER ASSEMBLY с осторожностью, чтобы избежать несоответствия результата выражения и его значения, хранящегося в сборке.

Инструкция ALTER ASSEMBLY изменяет версию сборки. Культура и токен открытого ключа сборки остаются прежними.

С помощью инструкции ALTER ASSEMBLY нельзя изменить:

  • Подписи функций CLR, агрегатных функций, хранимых процедур и триггеров в экземпляре SQL Server, на которые ссылается сборка. Инструкция ALTER ASSEMBLY не выполняется, если SQL Server не может связать объекты базы данных .NET Framework в SQL Server с новой версией сборки.

  • Подписи методов сборки, вызываемых из других сборок.

  • Список сборок, зависящих от сборки, указанный в свойстве DependentList сборки.

  • Возможность использования индексов в методе и в том числе, если только не существует индексов или постоянных вычисляемых столбцов, прямо или косвенно зависящих от этого метода.

  • Атрибут имени метода FillRow для функций CLR с табличным значением.

  • Подпись методов Accumulate и Terminate для пользовательских статистических функций.

  • Системные сборки.

  • Владение сборкой. Вместо этого можно использовать также ALTER AUTHORIZATION (Transact-SQL).

Кроме того, для сборок, реализующих определяемые пользователем типы, с помощью инструкции ALTER ASSEMBLY можно выполнять только следующие изменения:

  • изменение общих методов класса определяемого пользователем типа, если только не изменяются подписи или атрибуты;

  • добавление новых общих методов;

  • изменение приватных методов любым образом.

Поля в определяемом пользователем типе с собственной сериализацией, в том числе элементы данных или основные классы, с помощью инструкции ALTER ASSEMBLY изменить нельзя. Любые другие изменения не поддерживаются.

Если предложение ADD FILE FROM не указано, инструкция ALTER ASSEMBLY удаляет все файлы, связанные со сборкой.

Если инструкция ALTER ASSEMBLY выполняется без предложения UNCHECKED для данных, выполняются проверки того, что новая версия сборки не влияет на существующие данные в таблицах. В зависимости от объема данных, для которых необходима проверка, это может повлиять на производительность.

Разрешения

Необходимо разрешение ALTER на сборку. Дополнительные требования.

  • Для изменения сборки, обладающей набором разрешений EXTERNAL_ACCESS, имя входа SQL Server должно иметь разрешение EXTERNAL ACCESS на сервере.

  • Для изменения сборки, обладающей набором разрешений UNSAFE, необходимо быть членом предопределенной роли сервера sysadmin.

  • Для изменения набора разрешений сборки на EXTERNAL_ACCESS имя входа SQL Server должно иметь разрешение EXTERNAL ACCESS ASSEMBLY на сервере.

  • Для изменения набора разрешений сборки на UNSAFE необходимо быть членом предопределенной роли сервера sysadmin.

  • Для указания предложения WITH UNCHECKED DATA необходимо быть членом предопределенной роли сервера sysadmin.

Дополнительные сведения о наборах разрешений сборки см. в разделе Конструирование сборок.

Примеры

А.Обновление сборки

На следующем примере показано, как сборка ComplexNumber обновляется до последней копии модулей .NET Framework, содержащих ее реализацию.

Примечание

Сборка ComplexNumber может быть создана при выполнении образцов скриптов UserDefinedDataType.Дополнительные сведения см. в разделе Определяемый пользователем тип.

ALTER ASSEMBLY ComplexNumber

FROM 'C:\Program Files\Microsoft SQL Server\120\Tools\Samples\1033\Engine\Programmability\CLR\UserDefinedDataType\CS\ComplexNumber\obj\Debug\ComplexNumber.dll'

Б.Добавление файла, связанного со сборкой

На следующем примере показано, как производится передача файла с исходным кодом Class1.cs, связанного со сборкой MyClass. При этом предполагается, что сборка MyClass уже создана в базе данных.

ALTER ASSEMBLY MyClass 
ADD FILE FROM 'C:\MyClassProject\Class1.cs';

В.Изменение разрешений сборки

На следующем примере показано, как набор разрешений сборки ComplexNumber меняется с SAFE на EXTERNAL ACCESS.

ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS;

См. также

Справочник

CREATE ASSEMBLY (Transact-SQL)

DROP ASSEMBLY (Transact-SQL)

EVENTDATA (Transact-SQL)