简体   繁体   中英

SQL Server : using table function in stored procedure

I have function for combobox.

ALTER FUNCTION [FN.USERNew]
(   
    @USER_ID INT 
)
RETURNS TABLE 
AS
RETURN 
(
Select  [USER_NAME] , username_Id  From USER
WHERE USER_ID=@USER_ID
)
GO

I try to use above function in my stored procedure like below.

However, I get an error

Cannot Find either column"dbo" or the user -defined function or aggregate "dbo.FN.USERNew", or name is ambigous."

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

So why i can not use my function in my stored procedure ?

You have to continue to quote the name using [] or "" because . is used to separate name parts:

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

See Database Identifiers .


However, this is a table valued function - which would more normally be used in the FROM clause (possibly via APPLY ) - I'm not sure that SQL Server will let you use it in the SELECT clause since it can return multiple columns and rows. I think you may want:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM