具有uniqueidentifier作为返回值的MSSQL服务器函数

问题描述:

我已经为每个用户存储了一张表,其中存储了其历史记录。现在我需要一个函数,它获取此用户的最后一个动作。这是我的尝试。具有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

我前几天碰到了这个。尝试写行像

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