Table 值函数以 table 作为参数并执行连接
Table-valued function that takes table as parameter and performs join
我使用 SQL 服务器 2016。
我想编写一个将 table 作为参数的函数,然后对 table 与另一个 table 执行连接。
我声明了以下类型:
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
);
我收到以下错误:
Must declare the scalar variable "@WorklistIds".
我尝试声明变量,但出现错误:
The variable name '@WorklistIds' has already been declared. Variable names must be unique within a query batch or stored procedure.
加入 table 变量时应使用别名。
CREATE FUNCTION [dbo].[fnGetSomeData] (
@WorklistIds WorklistTable readonly
)
RETURNS TABLE
AS RETURN
(
select WorklistId, wlu.UserId
from @WorklistIds t
join [dbo].[WorklistUser] wlu on wlu.WorklistId = t.worklistId
-- the rest is omitted
);
在 table 变量中引用列时不能直接使用 @Table
名称。您要么需要为 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
我使用 SQL 服务器 2016。 我想编写一个将 table 作为参数的函数,然后对 table 与另一个 table 执行连接。 我声明了以下类型:
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
);
我收到以下错误:
Must declare the scalar variable "@WorklistIds".
我尝试声明变量,但出现错误:
The variable name '@WorklistIds' has already been declared. Variable names must be unique within a query batch or stored procedure.
加入 table 变量时应使用别名。
CREATE FUNCTION [dbo].[fnGetSomeData] (
@WorklistIds WorklistTable readonly
)
RETURNS TABLE
AS RETURN
(
select WorklistId, wlu.UserId
from @WorklistIds t
join [dbo].[WorklistUser] wlu on wlu.WorklistId = t.worklistId
-- the rest is omitted
);
在 table 变量中引用列时不能直接使用 @Table
名称。您要么需要为 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