以表为参数并执行连接的表值函数

时间:2017-07-31 12:47:16

标签: sql sql-server sql-server-2016

我使用的是SQL Server 2016。 我想编写一个函数,它将一个表作为参数,然后在该表上与另一个表执行连接。 我已声明以下类型:

CREATE TYPE WorklistTable AS TABLE (WorklistId int NOT NULL)

然后我在很多基于某些条件选择的函数中使用它

CREATE FUNCTION [dbo].[fnGetSomeData] (
@WorklistIds WorklistTable readonly
)
RETURNS TABLE
    AS RETURN
    (   
    select WorklistId, wlu.UserId
    from @WorklistIds
    join [dbo].[WorklistUser] wlu on wlu.WorklistId = @WorklistIds.worklistId   
    -- the rest is omitted 
);

我收到以下错误:

  

必须声明标量变量“@WorklistIds”。

我试图声明变量,但是我收到了一个错误:

  

已声明变量名'@WorklistIds'。变量名在查询批处理或存储过程中必须是唯一的。

2 个答案:

答案 0 :(得分:4)

当你加入表变量时,你应该使用别名。

<tr ng-repeat="item in emailsList track by $index">
    <td>
        <div class="rounded-checkbox">
            <input class="form-check-input" type="checkbox">
            <span></span>
        </div>
    </td>
    <td class="col-xs-12">{{ item.emails[$index] }}</td>
    <td>-</td>
</tr>

答案 1 :(得分:2)

在引用表变量中的列时,不能直接使用@Table名称。您需要对表进行别名或将其包装在方括号中:

select WorklistId, wlu.UserId
from @WorklistIds As W
join [dbo].[WorklistUser] wlu on wlu.WorklistId = W.worklistId 

或者

select WorklistId, wlu.UserId
from @WorklistIds
join [dbo].[WorklistUser] wlu on wlu.WorklistId = [@WorklistIds].worklistId