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

Откуда: Kiev
Сообщений: 100
Есть скрипт, который выполняет различные изменения при апдейте приложения к следующей версии.
Т.е. в скрипте масса различных инструкций типа
ALTER PROCEDURE; ALTER TABLE, etc.
Но все они выполняются как бы отдельными инструкциями. Т.е. следующий код в скрипте работает:
ALTER FUNCTION [dbo].[ufnGetAccountingEndDate]()
RETURNS [datetime] 
AS 
BEGIN
    RETURN DATEADD(millisecond, -2, CONVERT(datetime, '20040701', 112));
END;

GO 


Но мне понадобилось выполнять этот ALTER FUNCTION при определенном условии:
-- Check some condition for run ALTER FUNCTION:
IF 1 > 0 -- here will real check condition
BEGIN
	ALTER FUNCTION [dbo].[ufnGetAccountingEndDate]()
	RETURNS [datetime] 
	AS 
	BEGIN
		RETURN DATEADD(millisecond, -2, CONVERT(datetime, '20040701', 112));
	END

END


И получается, что внутри вот этого BEGIN - END выполнить ALTER FUNCTION невозможно.
MSDN говорит, что внутри хранимой процедуры невозможно выполнять определенные стейтменты. Но тут ведь не сторед процедура. Это скрипт.
Есть ли какой-то обход данного ограничения?
16 май 18, 16:57    [21414317]     Ответить | Цитировать Сообщить модератору
 Re: ALTER FUNCTION в скрипте  [new]
TaPaK
Member

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

msdn говорит что CREATE/ALTER должны быть первыми в батче. Для Вашего подхода только засовывать в динамику
16 май 18, 17:05    [21414354]     Ответить | Цитировать Сообщить модератору
 Re: ALTER FUNCTION в скрипте  [new]
Anatoliy
Member

Откуда: Kiev
Сообщений: 100
Под динрамикой вы имеете в виду что-то типа
execute dbo.sp_executesql @statement = N'ALTER FUNCTION ….'

?
16 май 18, 17:11    [21414373]     Ответить | Цитировать Сообщить модератору
 Re: ALTER FUNCTION в скрипте  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Anatoliy
Под динрамикой вы имеете в виду что-то типа
execute dbo.sp_executesql @statement = N'ALTER FUNCTION ….'

?

да.
Где то здесь рассматривали вариант через откат транзакций при условии, можете поискать. Но всё это не здраво :)
16 май 18, 17:14    [21414382]     Ответить | Цитировать Сообщить модератору
 Re: ALTER FUNCTION в скрипте  [new]
Tactical Nuclear Penguin
Member

Откуда: холодно тут
Сообщений: 2730
Anatoliy
Под динрамикой вы имеете в виду что-то типа
execute dbo.sp_executesql @statement = N'ALTER FUNCTION ….'

?


тынц
16 май 18, 17:15    [21414386]     Ответить | Цитировать Сообщить модератору
 Re: ALTER FUNCTION в скрипте  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Tactical Nuclear Penguin
Anatoliy
Под динрамикой вы имеете в виду что-то типа
execute dbo.sp_executesql @statement = N'ALTER FUNCTION ….'

?


тынц

просто на почитать? К вопросу то никак не относится
16 май 18, 17:18    [21414392]     Ответить | Цитировать Сообщить модератору
 Re: ALTER FUNCTION в скрипте  [new]
Anatoliy
Member

Откуда: Kiev
Сообщений: 100
Спасибо! Буду пробовать через sp_executesql
16 май 18, 17:19    [21414395]     Ответить | Цитировать Сообщить модератору
 Re: ALTER FUNCTION в скрипте  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Anatoliy, еще такой подход есть:

if 1 > 1 set noexec on
go
create FUNCTION [dbo].[ufnGetAccountingEndDate]()
	RETURNS [datetime] 
	AS 
	BEGIN
		RETURN DATEADD(millisecond, -2, CONVERT(datetime, '20040701', 112));
	end
go
set noexec off
16 май 18, 17:23    [21414406]     Ответить | Цитировать Сообщить модератору
 Re: ALTER FUNCTION в скрипте  [new]
TaPaK
Member

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

точно, по noexec тот топик и ищется
https://www.sql.ru/forum/1269224/skript-sozdaniya-procedur-po-nekotoromu-usloviu?hl=noexec
16 май 18, 17:29    [21414424]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить