SQL Функция зависла и не возвращает значение - PullRequest
1 голос
/ 14 июля 2020

У меня есть довольно простая функция, которая принимает строку, проверяет значения и заменяет их и возвращает результирующую строку после всех замен. Никаких циклов или чего-то еще.

Однако, когда я запускаю его, он просто сидит, как будто застрял в al oop, и не возвращает никакого значения.

Вот рассматриваемая функция:

ALTER FUNCTION [dbo].[fn_DeNormalizeCo] (@oldStr varchar(255))
    RETURNS varchar(255)
BEGIN
    DECLARE 
        @newStr varchar(255)

    SET @newStr = LTRIM(RTRIM(@oldStr))

    -- Tab  \t
    IF (@newStr LIKE '%'+CHAR(9)+'%')
        SET @newStr = REPLACE(@newStr, CHAR(9), '')
    
    -- Linefeed \n
    IF (@newStr LIKE '%'+CHAR(10)+'%')
        SET @newStr = REPLACE(@newStr, CHAR(10), '')
    
    -- Carriage Return \r
    IF (@newStr LIKE '%'+CHAR(13)+'%')
        SET @newStr = REPLACE(@newStr, CHAR(13), '')

    -- °
    IF (@newStr LIKE '%'+CHAR(176)+'%')
        SET @newStr = REPLACE(@newStr, CHAR(176), '')
    
    IF (@newStr LIKE '%#%')
        SET @newStr = REPLACE(@newStr, '#', '')

    IF (@newStr LIKE '%:%')
        SET @newStr = REPLACE(@newStr, ':', '')

    IF (@newStr LIKE '%;%')
        SET @newStr = REPLACE(@newStr, ';', '')

    IF (@newStr LIKE '%@%')
        SET @newStr = REPLACE(@newStr, '@', '')

    IF (@newStr LIKE '%[%]%')
        SET @newStr = REPLACE(@newStr, '%', '')

    IF (@newStr LIKE '%*%')
        SET @newStr = REPLACE(@newStr, '*', '')

    IF (@newStr LIKE '%&%')
        SET @newStr = REPLACE(@newStr, '&', '')

    IF (@newStr LIKE '%!%')
        SET @newStr = REPLACE(@newStr, '!', '')

    IF (@newStr LIKE '%$%')
        SET @newStr = REPLACE(@newStr, '$', '')

    IF (@newStr LIKE '%"%')
        SET @newStr = REPLACE(@newStr, '"', '')

    IF (@newStr LIKE '%''%')
        SET @newStr = REPLACE(@newStr, '''', '')

    

    IF (@newStr LIKE '%,INC.%')
        SET @newStr = REPLACE(@newStr, ',INC.', '')

    IF (@newStr LIKE '%,INC%')
        SET @newStr = REPLACE(@newStr, ',INC', '')

    IF (@newStr LIKE '%, INC.%')
        SET @newStr = REPLACE(@newStr, ', INC.', '')

    IF (@newStr LIKE '%, INC%')
        SET @newStr = REPLACE(@newStr, ', INC', '')

    IF (@newStr LIKE '% INC.')
        SET @newStr = REPLACE(@newStr, ' INC.', '')

    IF (@newStr LIKE '% INC')
        SET @newStr = REPLACE(@newStr, ' INC', '')


    IF (@newStr LIKE '%,LLC.%')
        SET @newStr = REPLACE(@newStr, ',LLC.', '')

    IF (@newStr LIKE '%,LLC%')
        SET @newStr = REPLACE(@newStr, ',LLC', '')

    IF (@newStr LIKE '%, LLC.%')
        SET @newStr = REPLACE(@newStr, ', LLC.', '')

    IF (@newStr LIKE '%, LLC%')
        SET @newStr = REPLACE(@newStr, ', LLC', '')

    IF (@newStr LIKE '%LLC.')
        SET @newStr = REPLACE(@newStr, ' LLC.', '')

    IF (@newStr LIKE '% LLC')
        SET @newStr = REPLACE(@newStr, ' LLC', '')



    IF (@newStr LIKE '%,CO.%')
        SET @newStr = REPLACE(@newStr, ',CO.', '')

    IF (@newStr LIKE '%,CO%')
        SET @newStr = REPLACE(@newStr, ',CO', '')

    IF (@newStr LIKE '%, CO.%')
        SET @newStr = REPLACE(@newStr, ', CO.', '')

    IF (@newStr LIKE '%, CO%')
        SET @newStr = REPLACE(@newStr, ', CO', '')

    IF (@newStr LIKE '% CO.%') 
        SET @newStr = REPLACE(@newStr, ' CO.', '')

    IF (@newStr LIKE '% CO%') 
        SET @newStr = REPLACE(@newStr, ' CO', '')



    IF (@newStr LIKE '%,CORP.')
        SET @newStr = REPLACE(@newStr, ',CORP.', '')

    IF (@newStr LIKE '%,CORP')
        SET @newStr = REPLACE(@newStr, ',CORP', '')

    IF (@newStr LIKE '%, CORP.')

        SET @newStr = REPLACE(@newStr, ', CORP.', '')

    IF (@newStr LIKE '%, CORP')
        SET @newStr = REPLACE(@newStr, ', CORP', '')

    IF (@newStr LIKE '% CORP.')
        SET @newStr = REPLACE(@newStr, ' CORP.', '')

    IF (@newStr LIKE '% CORP')
        SET @newStr = REPLACE(@newStr, ' CORP', '')



    IF (@newStr LIKE '%,MFG.')
        SET @newStr = REPLACE(@newStr, ',MFG.', '')

    IF (@newStr LIKE '%,MFG')
        SET @newStr = REPLACE(@newStr, ',MFG', '')

    IF (@newStr LIKE '%, MFG.')
        SET @newStr = REPLACE(@newStr, ', MFG.', '')

    IF (@newStr LIKE '%, MFG')
        SET @newStr = REPLACE(@newStr, ', MFG', '')

    IF (@newStr LIKE '% MFG.')
        SET @newStr = REPLACE(@newStr, ' MFG.', '')

    IF (@newStr LIKE '% MFG')
        SET @newStr = REPLACE(@newStr, ' MFG', '')



    IF (@newStr LIKE '%,INCORPORATED.%')
        SET @newStr = REPLACE(@newStr, ',INCORPORATED.', '')

    IF (@newStr LIKE '%,INCORPORATED%')
        SET @newStr = REPLACE(@newStr, ',INCORPORATED', '')

    IF (@newStr LIKE '%, INCORPORATED.%')
        SET @newStr = REPLACE(@newStr, ', INCORPORATED.', '')

    IF (@newStr LIKE '%, INCORPORATED%')
        SET @newStr = REPLACE(@newStr, ', INCORPORATED', '')

    IF (@newStr LIKE '% INCORPORATED.')
        SET @newStr = REPLACE(@newStr, 'INCORPORATED.', '')

    IF (@newStr LIKE '% INCORPORATED')
        SET @newStr = REPLACE(@newStr, 'INCORPORATED', '')


    RETURN @newStr
END

Я пробовал простой вызов с: SELECT [ULTRA].[dbo].[fn_DeNormalizeCo]('Noname LLC')

Чтобы исключить тот факт, что я вызываю функцию из другой базы данных, я также попробовал ее из [ULTRA] база данных с SELECT [dbo].[fn_DeNormalizeCo]('Noname LLC') с тем же результатом зависания.

Я действительно в растерянности, клянусь, я отлично использовал эту функцию, прежде чем мне пришлось стереть и перезагрузить свой P C.

Я использую:

  • SQL Server 2019 (v15.0.2070.41)
  • SSMS v18.5

1 Ответ

2 голосов
/ 14 июля 2020

Поскольку вы используете SQL Server 2019, возможно, стоит попробовать

alter function [dbo].[fn_DeNormalizeCo] (@oldStr varchar(255)) 
returns varchar(255) 
with inline = OFF

.., если у вас уровень совместимости базы данных 150 и встраивание включено.

Scalar встраивание все еще известно как ошибочное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...