视图,存储过程或表定义函数

Dev*_*ble 3 sql t-sql sql-server

此查询按原样执行.但是,SQL Management Studio不会将其保存为视图,因为我定义了一个变量.

DECLARE @HighestTransaction int

SET @HighestTransaction = (SELECT     MAX(CardID)
                            FROM          dbo.Transactions)

SELECT Uploads.*, Transactions.*
FROM   Uploads LEFT OUTER JOIN
       dbo.Transactions ON dbo.Uploads.Code = dbo.Transactions.CardID
WHERE  (Uploads.Code > CASE WHEN
           @HighestTransaction IS NULL THEN -1  ELSE @HighestTransaction END)

我还没有真正使用存储过程或用户定义的函数,所以我不确定这样做的最佳方法.或者,如果有更好的方式来写这个,我也愿意接受建议.

gbn*_*gbn 5

  • 您可以将MAX隔离为CTE
  • 没有GROUP BY的MAX给出一行,所以你在那里使用ISNULL

就像是...

WITh cHighestCard AS
(
   SELECT ISNULL(MAX(CardID), -1) AS MaxCard FROM dbo.Transactions
)
SELECT     STAUpload.*, Transactions.*
FROM         dbo.STAUpload LEFT OUTER JOIN
                      dbo.Transactions ON dbo.STAUpload.Code = dbo.Transactions.CardID
WHERE     dbo.STAUpload.Code > MaxCard --edit, error spotted by martin
Run Code Online (Sandbox Code Playgroud)

编辑:不需要CTE:它混合了集合和标量.哎呀.

SELECT     STAUpload.*, Transactions.*
FROM         dbo.STAUpload LEFT OUTER JOIN
                      dbo.Transactions ON dbo.STAUpload.Code = dbo.Transactions.CardID
WHERE     dbo.STAUpload.Code >
            (SELECT ISNULL(MAX(CardID), -1) AS MaxCard
                   FROM dbo.Transactions)
Run Code Online (Sandbox Code Playgroud)