SQL Server:在存储过程中使用表函数
本文关键字:函数 过程中 存储过程 Server 存储 SQL | 更新日期: 2023-09-27 18:35:21
我有组合框的函数。
ALTER FUNCTION [FN.USERNew]
(
@USER_ID INT
)
RETURNS TABLE
AS
RETURN
(
Select [USER_NAME] , username_Id From USER
WHERE USER_ID=@USER_ID
)
GO
我尝试在我的存储过程中使用上述函数,如下所示。
但是,我收到一个错误
找不到列"dbo"或用户定义的函数或聚合"dbo。FN.用户新",或者名字是模棱两可的。
ALTER PROCEDURE DBO.[MY_STORED_PROCEDURE]
(
@USER_ID INT,
@PRODUCT_ID INT
)
AS
BEGIN
SELECT
PRODUCT_ID,
PRODUCT_NAME
DBO.FN.USERNew(USER_ID) AS PROBLEMHERE
FROM PRODUCT_TABLE
WHERE PRODUCT_ID=@PRODUCT_ID
END
那么为什么我不能在我的存储过程中使用我的函数呢?
您必须继续使用 []
或 ""
引用名称,因为.
用于分隔名称部分:
ALTER PROCEDURE DBO.[MY_STORED_PROCEDURE]
(
@USER_ID INT,
@PRODUCT_ID INT
)
AS
BEGIN
SELECT
PRODUCT_ID,
PRODUCT_NAME
DBO.[FN.USERNew](USER_ID) AS PROBLEMHERE
FROM PRODUCT_TABLE
WHERE PRODUCT_ID=@PRODUCT_ID
END
请参阅数据库标识符。
但是,这是一个表值函数 - 通常在FROM
子句中使用(可能通过APPLY
) - 我不确定SQL Server是否会允许您在SELECT
子句中使用它,因为它可以返回多个列和行。我想你可能想要:
ALTER PROCEDURE DBO.[MY_STORED_PROCEDURE]
(
@USER_ID INT,
@PRODUCT_ID INT
)
AS
BEGIN
SELECT
PRODUCT_ID,
PRODUCT_NAME
ft.* AS PROBLEMHERE
FROM PRODUCT_TABLE pt
CROSS APPLY DBO.[FN.USERNew](pt.USER_ID) ft
WHERE pt.PRODUCT_ID=@PRODUCT_ID
END