SQL函数多次返回条目

时间:2016-06-29 09:11:22

标签: c# sql-server

我正在使用SQL函数返回两个表中的条目。表A包含有关UserIdFileIDCreated日期时间的信息。 表B包含有关UserIDFileID和传输State的信息。

该函数应返回UserIDFileIDCreatedState

的条目

该功能如下所示:

WITH FindNewestVersion as
    (
        Select Created AS cDate, FileId AS fId, UserId AS uId, ROW_NUMBER() over (partition by FileId, UserId ORDER BY Created DESC)rn from TableA
        where Created <= @dueDate
    )

    SELECT * from TableB AS B, TableA AS A 
    INNER JOIN (Select cDate, userId, FileId from FindNewestVersion where rn = 1) AS x
    ON A.Created = cDate AND A.UserId = uId AND A.FileId = fId  
    WHERE A.UserId = ISNULL(@userId, A.UserId) AND A.FileId = ISNULL(@fileId, q.FileId)
    AND B.TaskType = 'Transmission'

我在C#中使用的函数的调用如下所示:

select A.UserId, A.FileId, A.Created, A.VersionId, 
case when B.variableColumn1 is null then null else B.variable1 end AS TransState 
from dbo.LSFN_GetMatrixAtDueDate([PARAMETERS]) AS A left join TableB AS B 
ON A.VersionId = B.variableColumn2 AND A.VersionId = B.variableColumn3

我正在使用此调用,因为表B中的列可以包含各种任务的不同信息,我必须借助于&#34;传输任务&#34;的配置文件来确定正确的列。但是我不想使用动态SQL,所以我可以使用columnNames作为函数本身的参数。

所以,这个函数和调用几乎正常工作。让我们举个例子。

表A包含:

UserID   | FileID   | Created
--------------------------------
UserA    | FileA    | 01.01.2011
UserA    | FileB    | 01.01.2011
UserC    | FileC    | 01.01.2011

表B包含:

Variable1 (State)  | Variable2 (Version/File) | Variable3 (UserId) 
------------------------------------------------------------------
Completed          | FileA                    | UserA
Completed          | FileC                    | UserC

所以,让我们说,我想得到属于UserA的两个表的所有条目 结果应如下所示:

UserID | FileID | Created    | State
----------------------------------------
UserA  | FileA  | 01.01.2011 | Completed
UserA  | FileB  | 01.01.2011 | NULL

但是,我为每个结果获取多个条目,因此结果如下所示:

UserID | FileID | Created    | State
----------------------------------------
UserA  | FileA  | 01.01.2011 | Completed
UserA  | FileA  | 01.01.2011 | Completed
UserA  | FileB  | 01.01.2011 | NULL
UserA  | FileB  | 01.01.2011 | NULL

它以某种方式与表B中的条目数量相关。如果我删除了UserC的条目,我将获得所有结果条目的正确,但如果我向TableB添加另一行(这样有3个条目),我将得到每个结果三次。 我想这与select有关,我在调用函数,但我不知道那里有什么问题......

0 个答案:

没有答案