1

Я хочу добавить новый параметр в существующую хранимую процедуру. Тело этой процедуры, возможно, уже настроено пользователями, поэтому я не могу его заново воссоздать. Мне не нужно изменять тело, просто подпись.Как добавить параметр к существующей хранимой процедуре в SQL Server

Так что я решил сделать замену последнего существующего параметра самостоятельно + нового параметра.

replace(OBJECT_DEFINITION (OBJECT_ID(id)),'@last_param varchar(max)=null','@last_param varchar(max)=null, @new_param varchar(max)=null') 

Он отлично работает, если следующая строка найдена

@last_param varchar(max)=null 

, но не работает, если есть пробелы в строке.

Я хотел бы использовать регулярное выражение, чтобы убедиться, что он работает во всех случаях, но я не уверен, что это возможно в SQL Server.

Вы можете мне помочь?

Thanks

ответ

0

SQL Server не поддерживает регулярные выражения. Вам нужно будет просмотреть более ручную строку анализа с помощью доступных string functions. Что-то вроде этого:

set @obDef = OBJECT_DEFINITION(OBJECT_ID(id)) 
set @startLastParam = PATINDEX('%@last_param%varchar%(%max%)%=%null%', @obDef) 
if @startLastParam = 0 begin 
    -- handle lastParam not found 
end else begin 
    set @endLastParam = CHARINDEX('null', @obDef, @startLastParam) + 4 -- 4 = len('null') 
    set @newDef = STUFF(@obDef, @endLastParam, 0, ', @new_param varchar(max)=null') 
end 

Это не очень надежный/безопасный. PATINDEX() только дает вам тот же % шаблон, который вы знаете от LIKE, он может не совпадать с символом, он может совпадать с половиной хранимой процедуры, чтобы найти слово max где-то полностью вне подписи.

Так что не просто запускайте это у своих клиентов ;), но если вы уверены в текущей хранимой сигнатуре proc, это может просто сделать трюк для вас.

+0

спасибо !! ваше решение решило мою проблему :) – user3218533

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