Как переписать оператор select, если он содержит функцию? - PullRequest
0 голосов
/ 09 октября 2018

После всех моих оптимизаций я обнаружил, что для хранимой инструкции SELECT требуется много времени, поскольку она содержит функцию в условии выбора и где.пожалуйста, помогите мне переписать оператор выбора.

if OBJECT_ID('QATR_TestCase0003_ElementElIDContainsUpperCase')         
is not null drop table QATR_TestCase0003_ElementElIDContainsUpperCase        
select elid, tsmkey, dbo.[ContainCapLetter](elid) ContaintCap ,  
cast('Element elid  '+elid+' contains UPPER CASE in GenProductsAll ' as 
nvarchar(255)) datastatus         
into QATR_TestCase0003_ElementElIDContainsUpperCase from TblGenProductsAll        
where dbo.[ContainCapLetter](elid) <>0

ниже моя функция, которую я написал:

CREATE FUNCTION [dbo].[ContainCapLetter] (@str1 as nvarchar(255))    
RETURNS int  
BEGIN   
declare @j int,  @i int
set @i=0  
 select @j = len(@str1)  

while @j >0  
begin  
If unicode(left(@str1,1)) not between 64 and 91  
begin  
set @str1 = right(@str1,len(@str1)-1)  
select @j= len(@str1)  
end  

Else If unicode(left(@str1,1)) between 64 and 91  
begin  
set @i= 1  
set @j= 0  
end  

end  
return @i  
END  

1 Ответ

0 голосов
/ 09 октября 2018

вы можете попробовать это.

select elid, tsmkey, 
    CASE WHEN elid like '%[ABCDEFGHIJKLMNOPQRSTUVWXYZ]%' COLLATE Latin1_General_CS_AS THEN 1 ELSE 0 END ContaintCap ,
    cast('Element elid  '+elid+' contains UPPER CASE in GenProductsAll ' as nvarchar(255)) datastatus         
into QATR_TestCase0003_ElementElIDContainsUpperCase 
from TblGenProductsAll        
where 
    elid like '%[ABCDEFGHIJKLMNOPQRSTUVWXYZ]%' COLLATE Latin1_General_CS_AS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...