Как обновить, чтобы обновить код (сборку) C # CLR в SQL Server?

Я реализовал образец «HelloWorld» хранимой среды CLR процедура, и это сработало.

Затем я изменил код, перекомпилировал и повторно запустил его, и получил старые результаты, а не новые.

Пример изменения кода (весь другой код находится по ссылке выше):

До:

SqlContext.Pipe.Send("Hello world!\n");

После:

SqlContext.Pipe.Send("Hello world new version!\n");

Есть ли что-нибудь, кроме повторного использования SQL для загрузки новой сборки?


person NealWalters    schedule 04.11.2013    source источник
comment
Можете ли вы опубликовать код, который у вас есть, вместе с фактическими результатами и ожидаемыми результатами?   -  person admdrew    schedule 05.11.2013
comment
Вам необходимо повторно развернуть вашу процедуру, а не просто перекомпилировать ее.   -  person Matt Whitfield    schedule 05.11.2013
comment
@admdrew Фактический код находится в приведенной мной ссылке. Я просто изменил вопрос, чтобы показать, что я изменил.   -  person NealWalters    schedule 05.11.2013
comment
@Matt - вот в чем вопрос, как развернуть. Изначально я развернул, добавив сборку и добавив хранимую процедуру. Я не выполнял развертывание из Visual Studio.   -  person NealWalters    schedule 05.11.2013


Ответы (2)


Предположим, вы создали функцию CLR HelloSQLCLR() на C #
Вам потребуются следующие шаги, прежде чем вы сможете вызвать ее на сервере Sql
Включить SQLCLR

sp_configure 'clr_enabled', 1
GO
RECONFIGURE
GO

Установите и зарегистрируйте HelloSQLCLR

Установить (изменить каталог на фактическое местоположение)

CREATE ASSEMBLY MyUDFsLib
    FROM 'C:\Path_To_Your_DLL\HelloSQLCLR.dll'
GO

Зарегистрироваться

CREATE FUNCTION dbo.HelloSQLCLR()
    RETURNS NVARCHAR(50)
    EXTERNAL NAME MyUDFsLib.MyUDFs.HelloSQLCLR;

Протестируйте

SELECT dbo.HelloSQLCLR() 

Изменить
Если вы изменили код, попробуйте что-нибудь вроде этого

ALTER ASSEMBLY MyUDFsLib 
FROM 'C:\Path_your_changed_Recomplied_DLL\.dll' 
person M.Ali    schedule 04.11.2013
comment
Хороший ответ, но не на мой вопрос. Я уже сделал эти шаги. Теперь я изменил код, и он запускает тот же старый код, старая сборка все еще загружена. - person NealWalters; 05.11.2013
comment
@NealWalters: Последний шаг, ALTER ASSEMBLY ... должен обновиться до новых бит. - person Remus Rusanu; 05.11.2013
comment
Спасибо, все, что мне было нужно, это последний оператор ALTER. На самом деле я пытался отбросить сборку, но поскольку сборка использовалась в сохраненной процедуре, это не позволило мне сделать это, не отбросив обе. - person NealWalters; 05.11.2013
comment
@NealWalters Без проблем, рад, что помог :) - person M.Ali; 05.11.2013

Вам нужно заново создать хранимую процедуру, основанную на CLR, просто изменить DLL недостаточно.

person Szymon    schedule 04.11.2013
comment
Хорошо, вот вариант. Сейчас я создаю функцию, и методы были частными. Функция создания не работает. Поменял частное на публичное, перекомпилировал. Я даже сбросил сборку и заново добавил. Но теперь, каждый раз, когда я пытаюсь создать функцию, она по-прежнему видит код как частный, а не как открытый. Таким образом, он использует кешированную DLL вместо моей новой .DLL - person NealWalters; 05.11.2013
comment
Я бросил и прочитал Stored Proc и получил тот же результат. Кстати, на SPROC есть маленький символ замка. Что вызывает это? - person NealWalters; 05.11.2013
comment
Блокировка означает, что ваша сохраненная процедура зашифрована. - person Szymon; 05.11.2013
comment
Вам нужно снова использовать ALTER ASSEMBLY или CREATE ASSEMBLY. Это шаг, когда код dll "кешируется" - person Anatoli Klamer; 28.01.2020