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