将 SQL 服务器过程转换为视图
Converting a SQL Server Proc to a View
我正在尝试将以下 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';
按照目前的情况,这段代码可以工作并提取我需要的信息。由于我不想解释的原因,我想将其转换为视图。我知道您不能按照我的方式声明变量,但是有没有一种方法可以修改我必须允许使用上面的两个变量的内容?
这比你想象的要简单
我先把你感动了select然后做“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';
我正在尝试将以下 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';
按照目前的情况,这段代码可以工作并提取我需要的信息。由于我不想解释的原因,我想将其转换为视图。我知道您不能按照我的方式声明变量,但是有没有一种方法可以修改我必须允许使用上面的两个变量的内容?
这比你想象的要简单 我先把你感动了select然后做“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';