Преобразование SQL Server Proc в представление - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь преобразовать следующий код SQL в представление:

DECLARE @Date DATE
DECLARE @ID INT

SELECT @ID = SystemCalendarID,
        @Date = Date
FROM Server2.dbo.SystemCalendar
WHERE IsCurrentReportingDay = 'Y'

SELECT cp.ClientName + ' (' + CAST(cp.ClientID AS VARCHAR(MAX)) + ')' [Reporting point] ,
       icp.ClientName + ' (' + CAST(icp.ClientID AS VARCHAR(MAX)) + ')' [Issuer] ,
       RTRIM(icp.GroupName) + ' (' + CAST(icp.GroupID AS VARCHAR(MAX)) + ')' [Group] ,
       s.ClientName + ' (' + CAST(s.ClientID AS VARCHAR(MAX)) + ')' AS [Site] ,
       i.ACCode ,
       tr.SourceSystemTradeId ,
       tr.SWWR ,
       tr.SWWRError ,
       tc.SanctionerComment ,
       tc.SignOffBy ,
       tc.CompletedFlag ,
       tc.PreApprovedFlag ,
       tc.GenuineWWRFlag ,
       tc.TradeCommentsID ,
       tc.HistoryID
FROM   myapp.SWWR_NonIndex_Trades tr
       LEFT JOIN myapp.vwLatestSWWR_NonIndex_TradeComments tc ON tc.SourceSystemTradeID = tr.SourceSystemTradeId
                                                               AND tc.IsActive = 1
       INNER JOIN myapp.SWWR_NonIndex_TradeAttribs ta ON ta.TradeID = tr.TradeID
                                                       AND ta.IsActive = 1
                                                       AND ta.MaturityDate >= @Date
                                                       AND ta.TradeDate <= @Date
                                                       AND ta.ID = @ID
       LEFT JOIN Server2.dbo.vwLatestReporting_Client cp ON cp.ClientID = tr.ReportingPointCpartyID
       LEFT JOIN Server2.dbo.vwLatestReporting_Client lcp ON lcp.ClientID = tr.LegalEntityID
       LEFT JOIN Server2.dbo.vwLatestReporting_Client s ON s.ClientID = tr.SiteID
       LEFT JOIN myapp.Issuer i ON i.ACCode = tr.ACCode
                                 AND i.IsLatest = 1
       LEFT JOIN Server2.dbo.vwLatestReporting_Client icp ON icp.ClientID = COALESCE(
                                                                                   tr.CreditDerivativeUnderlyingIssuerId ,
                                                                                   i.SDS)
WHERE  tr.IsActive = 1
       AND tr.SWWR ='Y';

В настоящее время этот код работает и извлекает нужную мне информацию. По причинам, которые я не хочу объяснять, я хочу преобразовать это в представление. Я знаю, что вы не можете объявлять переменные так, как я, но есть ли способ, которым я могу изменить то, что мне нужно, чтобы разрешить использование моих двух переменных выше?

1 Ответ

0 голосов
/ 26 июня 2018

это проще, чем вы думаете я переместил вас сначала выберите и сделайте вид "1 = 1" и тогда вам не нужны никакие переменные

CREATE VIEW XXX  
AS  
SELECT cp.ClientName + ' (' + CAST(cp.ClientID AS VARCHAR(MAX)) + ')' [Reporting point] ,
       icp.ClientName + ' (' + CAST(icp.ClientID AS VARCHAR(MAX)) + ')' [Issuer] ,
       RTRIM(icp.GroupName) + ' (' + CAST(icp.GroupID AS VARCHAR(MAX)) + ')' [Group] ,
       s.ClientName + ' (' + CAST(s.ClientID AS VARCHAR(MAX)) + ')' AS [Site] ,
       i.ACCode ,
       tr.SourceSystemTradeId ,
       tr.SWWR ,
       tr.SWWRError ,
       tc.SanctionerComment ,
       tc.SignOffBy ,
       tc.CompletedFlag ,
       tc.PreApprovedFlag ,
       tc.GenuineWWRFlag ,
       tc.TradeCommentsID ,
       tc.HistoryID
FROM   Server2.dbo.SystemCalendar SC       
       INNER JOIN myapp.SWWR_NonIndex_Trades tr ON SC.IsCurrentReportingDay = 'Y'
       LEFT JOIN myapp.vwLatestSWWR_NonIndex_TradeComments tc ON tc.SourceSystemTradeID = tr.SourceSystemTradeId
                                                               AND tc.IsActive = 1
       INNER JOIN myapp.SWWR_NonIndex_TradeAttribs ta ON ta.TradeID = tr.TradeID
                                                       AND ta.IsActive = 1
                                                       AND ta.MaturityDate >= SC.Date
                                                       AND ta.TradeDate <= SC.Date
                                                       AND ta.ID = SC.SystemCalendarID
       LEFT JOIN Server2.dbo.vwLatestReporting_Client cp ON cp.ClientID = tr.ReportingPointCpartyID
       LEFT JOIN Server2.dbo.vwLatestReporting_Client lcp ON lcp.ClientID = tr.LegalEntityID
       LEFT JOIN Server2.dbo.vwLatestReporting_Client s ON s.ClientID = tr.SiteID
       LEFT JOIN myapp.Issuer i ON i.ACCode = tr.ACCode
                                 AND i.IsLatest = 1
       LEFT JOIN Server2.dbo.vwLatestReporting_Client icp ON icp.ClientID = COALESCE(
                                                                                   tr.CreditDerivativeUnderlyingIssuerId ,
                                                                                   i.SDS)
WHERE  tr.IsActive = 1
       AND tr.SWWR = 'Y';
...