0
從我的存儲過程這個SQL片段:UDF可以返回可以與「IN」關鍵字一起使用的列表嗎?
-- Having the PanelPayout role gives you more transaction types to look for, hence the CASE statement.
CASE WHEN EXISTS (SELECT RoleID FROM aspnet_UsersInRoles ur WHERE ur.RoleID = 'DEDCD456-A25A-43C5-8125-A1D1223B19EC' AND ur.UserID = s.aspnet_UserID) THEN
(SELECT ISNULL(SUM(Amount), 0) FROM TransactionsLog payouts WHERE
payouts.StaffID = s.ID
AND payouts.TransactionType IN (48, 49, 3, 16, 292, 293)
AND (payouts.OrderDate >= dbo.Date(@date) AND payouts.OrderDate <= dbo.EndOfDay(@date))
AND @shift = CASE @shift WHEN 0 THEN 0 ELSE dbo.GetShiftByDate(payouts.OrderDate) END
)
ELSE
(SELECT ISNULL(SUM(Amount), 0) FROM TransactionsLog payouts WHERE
payouts.StaffID = s.ID
AND payouts.TransactionType IN (48, 49, 3)
AND (payouts.OrderDate >= dbo.Date(@date) AND payouts.OrderDate <= dbo.EndOfDay(@date))
AND @shift = CASE @shift WHEN 0 THEN 0 ELSE dbo.GetShiftByDate(payouts.OrderDate) END
)
END
這工作得很好。然而,總的來說,由於7年前數據庫最初結構的一些問題,查詢沒有返回我想要的結果。所以,我將使用C#來完成我需要做的事情。我的問題是可以在UDF返回,可以在使用INTS的名單,所以我只需要編寫
(SELECT ISNULL(SUM(Amount), 0) FROM TransactionsLog payouts WHERE
payouts.StaffID = s.ID
AND payouts.TransactionType IN dbo.PayoutTransactionsValidForStaff(s.ID)
AND (payouts.OrderDate >= dbo.Date(@date) AND payouts.OrderDate <= dbo.EndOfDay(@date))
AND @shift = CASE @shift WHEN 0 THEN 0 ELSE dbo.GetShiftByDate(payouts.OrderDate) END
)
其中PayoutTransactionsValidForStaff(s.ID)
將返回檢查需要整數的名單?我會想象它可能是一個表值函數,但我沒有時間測試,因爲我得到這個更新發貨。只是想知道是否有人知道他們的頭頂。謝謝!
謝謝!那時候我想過那個。 – 2012-07-11 22:49:59