2013-10-14 46 views
-2
ALTER FUNCTION [dbo].[FN.USER] (@USER_ID INT) 
RETURNS VARCHAR(300) AS 
BEGIN 

DECLARE @RESULT VARCHAR(300) = '' 

Select @RESULT =[USER_NAME] From USER 
WHERE [email protected]_ID 

RETURN @RESULT 

我必须在我的组合框中显示Username。不过我也需要username_Id的值。想要从用户定义函数返回多列

如何为我的结果设置用户名并同时选择用户标识值?

任何帮助将不胜感激。

谢谢。

+0

你的问题还不清楚。我想可能有两个。 1.如何从存储过程返回用户名和ID(我们需要表结构)2.如何在组合中显示。 – RedEyedMonster

+0

'comboBox'的属性允许这是可能的。将'UserID'添加到返回的数据中。当您根据您的SQL创建下拉选项时,只需在查询结果中指定“DisplayMember”和“ValueMember”即可。 – William

+0

为什么你甚至需要这个功能?你不能只是作为查询的一部分进行连接吗?我会给你一个提示:标量函数不可能让你的代码更快,在大多数情况下,它们会让它变慢。封装是有趣而有光泽的,但并不总是合适的。 –

回答

1

试试这个

CREATE FUNCTION [FN.USERNew] 
( 
    @USER_ID INT 
) 
RETURNS TABLE 
AS 
RETURN 
(
    -- Add the SELECT statement with parameter references here 
Select [USER_NAME] , username_Id From USER 
WHERE [email protected]_ID 
) 
GO 

,然后你可以从功能,通过书写下列

SELECT * FROM [dbo].[FN.USERNew] (1) 
+0

如果我写回来,返回红线下,它给出语法错误 – user2869820

+0

你采取了整个代码,并创建了一个新的功能? – Dhaval

+0

我试着在我的存储过程中使用这个函数。因此,如果我编写像FN.USERNew(User_Id)AS UserData,我得到语法错误 – user2869820

0

这是一个标量函数不是一个存储过程中选择,你可以使用它在select语句这样

SELECT Username(somevalue), .... 

如果你想写一个存储过程然后尝试以下操作:

CREATE PROCEDURE GetUser 
    @USER_ID int 
AS 
SELECT [USER_NAME], username_Id, whatever ... 
FROM USER 
WHERE USER_ID = @USER_ID 

或者,您可以使用表函数根据Dhaval的答案。

如果你想从其他表的数据只是做一个连接,例如

CREATE PROCEDURE GetUser 
     @USER_ID int 
    AS 
    SELECT [USER_NAME], username_Id, whatever ... 
    FROM USER u 
    INNER JOIN OtherTable ot ON ot.id = u.otid 
    WHERE USER_ID = @USER_ID 
0
ALTER FUNCTION [dbo].[FN.USER] (@USER_ID INT) 
BEGIN 
Select USER_NAME, USER_ID 
From USER 
Where [email protected]_ID 
END 

如果你想在你的组合框有两个值,只需设置combobox.DisplayMember作为用户名的描述,以及combobox.ValueMember作为用户名ID。

comboProject.DisplayMember = "USER_NAME"; 
comboProject.ValueMember = "USER_ID";