2016-03-28 12 views
0

Şu anda performans nedenleriyle bir inline TVF'ye dönüştürmek istediğim çok bildirimli bir TVF'im var ve bununla ilgili bazı zorluklar yaşıyorum. Benzer konularla ilgili birkaç soru daha okudum, ama hala benim çalışmamı zorlaştırıyorum. Herkes etkili bir satır içi TVF içine bu dönüştürmek için nasıl herhangi bir analiz varsaÇoklu tablodaki tablo değerli işlevini inline TVF'ye dönüştürün.

CREATE FUNCTION [dbo].[CLRSample](@serviceURL [nvarchar](256),@userName nvarchar(100), @Password nvarchar(100),@format [nvarchar](100),@oldText nvarchar(max)) 
RETURNS TABLE (data nvarchar(500)) 
AS 
EXTERNAL NAME [Sample.SqlClr].[SQLCLR.SampleFunctions].[Sample]; 
GO 

, ben: o başvuran oluyor

CREATE FUNCTION CN.Sample (@format nvarchar(100), @oldText nvarchar(max)) 
RETURNS @Results TABLE (newtext nvarchar(max)) 
AS 
BEGIN 
    DECLARE @WebServiceURL nvarchar(256); 
    DECLARE @pUrl nvarchar(256); 
    DECLARE @pFP nvarchar(256) = NULL; 
    DECLARE @enableMC bit = 'true'; 
    DECLARE @allowShort bit = 'false'; 
    DECLARE @identity nvarchar(100); 
    DECLARE @allowRNG bit = 'false'; 
    DECLARE @UserName nvarchar(100) = ''; 
    DECLARE @Password nvarchar(100) = ''; 
    DECLARE @FileCache nvarchar(256) = ''; 
    DECLARE @Status varchar(10); 

    SELECT @WebServiceURL = WebServiceURL, 
      @pUrl = PURL, 
      @identity = IdentityName , 
      @UserName = UserName, 
      @Password = [Password], 
      @FileCache = FileCache 
    FROM [CN].[VCC] 
    WHERE FormatName = @format; 

    INSERT INTO @Results(newtext) 
    SELECT data 
    FROM dbo.CLRSample (@WebServiceURL,@UserName,@Password,@format,@oldText); 
    RETURN; 

END 

GO 

select d.* 
from dbo.EE 
cross apply CN.Sample ('asdf', EE.text) d 

CLR işlevi:

İşte benim şimdiki çoklu ifadedir Bunu takdir ediyorum.

Ayrıca, ikinci bir sorum var. Okumalarımda, satır içi satırların "mümkün olduğunda" çoklu ifadelere tercih edildiği oldukça sade bir şekilde yapılmıştı, ancak bu, satır içi ifadenin kullanılmasının mümkün olmadığı senaryolar olduğunu ima ediyor. Böyle bir senaryonun nasıl görüneceğinden ve neden var olacağından emin değilim. Bununla ilgili herhangi bir fikir veya örnek varsa, bu da takdir edilecektir.

cevap

2

Çıkarma tüm gereksiz değişkenler:

CREATE FUNCTION CN.Sample (@format nvarchar(100), @oldText nvarchar(max)) 
RETURNS TABLE AS 
RETURN 
(
    SELECT 
     (SELECT data FROM dbo.CLRSample (WebServiceURL, UserName, [Password], @format, @oldText)) AS data 
    FROM [CN].[VCC] 
    WHERE FormatName = @format  
) 
GO 
İlgili konular