2014-11-06 26 views
0

我已經爲每個用戶存儲了一張表,其中存儲了其歷史記錄。現在我需要一個函數,它獲取此用戶的最後一個動作。這是我的嘗試。具有uniqueidentifier作爲返回值的MSSQL服務器函數

CREATE FUNCTION [dbo].[GetLastUserActionID] 
(
    @userID uniqueidentifier 
) 
RETURNS uniqueidentifier 
AS BEGIN 
    DECLARE @actionID uniqueidentifier 
    DECLARE @tableName nvarchar(max) 
    Set @tableName = '[tbl_History' + convert(nvarchar(36), @userID) + ']' 
    SELECT @actionID = Top(1) his_ID from @tableName ORDER BY his_Date desc 
    RETURN @actionID 
END 

該行的服務器不喜歡在所有:

SELECT @actionID = Top(1) his_ID from @tableName ORDER BY his_Date desc 

「頂部(1)」 標記。也許有人知道一個替代的建議來實現我的目標?

+0

我的答案是否適合你? – 2014-11-06 18:34:38

+1

對不起,我以爲我已經... – Tagamoga 2014-11-07 13:59:05

回答

1

我前幾天碰到了這個。嘗試寫行像

SELECT Top 1 @actionID = his_ID from @tableName ORDER BY his_Date desc 
+0

它工作正常,但現在我有下一個問題。 ;-)服務器告訴我,我必須先定義「@table」。我現在就着手解決這個問題。謝謝你的幫助! – Tagamoga 2014-11-07 08:37:47

+0

它看起來像是將臨時表設置爲NVarchar ..您需要將該變量設置爲表格......就像這樣。 DECLARE @table TABLE ( ID INT, 名VARCHAR(32) ) – 2014-11-07 13:26:04

+0

這裏是簽出對 http://databases.aspfaq.com/database/should-i-use-的製品a-temp-table-or-a-table-variable.html – 2014-11-07 13:26:24

相關問題