Извиняюсь за исходный вопрос, понимаю, что не совсем понятно, в чем проблема.Я не смог определить проблему, но подозреваю, что функция REPLACE потенциально имеет ограничение по количеству символов, и как только первый REPALCE был разрешен, он потенциально обрезал мою строку перед переходом к следующему REPLACE?
Вместо I 'мы поместили его в переменную и выполнили оператор замены поэтапно, это не дает мне никаких ошибок.
Основная цель этого кода состояла в том, чтобы просто взять существующую живую процедуру, которая заполняет важные для бизнеса таблицы и заменить всетаблицы в нем с фиктивными или имитационными таблицами, так что я могу возиться с различными результатами логического вывода и не влиять на какие-либо процессы.Я хотел сделать это таким образом, потому что процедура ежедневно изменялась различными пользователями SQL, поэтому ручное выполнение сценариев оставляло бы процедуру 'Simulation' устаревшей.
Если у кого-то есть более эффективный способделайте это, если вы могли бы поделиться, поскольку приведенное ниже решение является громоздким и требует ручного обновления при добавлении новых таблиц.
/******************************************************************************************
* Put Procedure Text Into String *
*******************************************************************************************/
SET @Priority_ExecutableString = (
SELECT OBJECT_DEFINITION(object_id(ROUTINE_NAME))
FROM INFORMATION_SCHEMA.ROUTINES
WHERE specific_name LIKE 'usp_Cs_Coll_NBA_Priority_And_Exclusions'
)
/******************************************************************************************
* Use Substring To Remove Parts Of String *
* As defined by the µ start and ! End Points In The Original Procedure
*******************************************************************************************/
SET @StringIWantToRemove =
(
SELECT SUBSTRING (@Priority_ExecutableString, -- String
CHARINDEX('µ',@Priority_ExecutableString), -- Start_Position
(CHARINDEX('!',@Priority_ExecutableString) - CHARINDEX('µ',@Priority_ExecutableString)))-- Length
)
SET @Priority_ExecutableString = (SELECT REPLACE(@Priority_ExecutableString, @StringIwantToRemove,''))
/**************************************************************************************
****
* Step 2 : Replace Defaulted 'Create Procedure' With 'Alter Procedure'
*******************************************************************************************/
SET @Priority_ExecutableString = (SELECT REPLACE(@Priority_ExecutableString, 'Create Procedure', 'ALTER PROCEDURE'))
/******************************************************************************************
* Step 3 : Replace Original Procedure Name With Simulation Procedure Name
*******************************************************************************************/
SET @Priority_ExecutableString = (SELECT REPLACE(@Priority_ExecutableString, '[dbo].[usp_Cs_Coll_NBA_Priority_And_Exclusions]','[dbo].[usp_Cs_Coll_NBA_Priority_And_Exclusions_Simulation]'))
/******************************************************************************************
* Step 4 : Replace Offer_Stage Table With Offer_Stage Simulation Table
*******************************************************************************************/
SET @Priority_ExecutableString = (SELECT REPLACE(@Priority_ExecutableString, 'WORKDBOPS_NBA.dbo.t_CS_Coll_NBA_offer_stage','WORKDBOPS_NBA.dbo.t_CS_Coll_NBA_offer_stage_Simulation'))