2015-04-02 138 views
2

我研究并尝试,但无法弄清楚这是我到目前为止。 我想要它做的是连接Fstring和Lstring,并返回结果加上当前日期在这种情况下@date 我宣布变量@Fstring和@Lstring作为输入和@date作为getdate函数。 我只能得到它要么返回日期或@fullname :( ,我不能揣摩出我错了 在正确的方向上的任何帮助将不胜感激从sql服务器中的函数返回多个值

==== start function=== 
create function ufn_function_4 
(
     @Fstring varchar(20) , @Lstring varchar(20) 
) 
returns varchar (20) 
as 
begin 
Declare @date datetime = getdate() 
Declare @fullname varchar(100) 
set @fullname = @Fstring + ' ' + @Lstring; 
return (@[email protected]) 
end 
go 

==== start select ==== 

select [dbo].[ufn_function_4]('Fred','Van Vliet'); 
+0

您是否考虑过与一个或多个OUT参数写一个存储过程,而不是使用的功能? – 2015-04-02 08:58:15

回答

0

改变这一行,你只有一个VARCHAR(20)作为RETURN

SET @fullname = @Fstring + ' ' + @Lstring + ' ' + CONVERT(VARCHAR(20), @date) 

如果你想在不同的值返回两个你需要定义一个表值函数

东西升迈克:

CREATE FUNCTION ufn_function_4 
( 
    @Fstring varchar(20) , @Lstring varchar(20) 
) 
RETURNS @table TABLE ([date] DATETIME, fullname VARCHAR(1000)) 
AS 
BEGIN 

    Declare @date datetime = getdate() 
    Declare @fullname varchar(100) 
    set @fullname = @Fstring + ' ' + @Lstring; 

    INSERT INTO @table 
     SELECT @date, @fullname 

    RETURN 
END 

调用功能

SELECT * FROM ufn_function_4('james', 'connery') 
-1

您所创建的函数是标量函数你做的差不多了吧,除了:

1。提高返回类型的长度,除非你的函数将返回20

2最大长度的字符串:投的日期时间为varchar当你想用VARCHAR值concatinate它,除非你会得到类型转换错误

3:删除分号设置@file名

我的意思是你功能之后:

create function ufn_function_4 
(
     @Fstring varchar(20) , @Lstring varchar(20) 
) 
returns varchar (100) 
as 
begin 
Declare @date datetime = getdate() 
Declare @fullname varchar(100) 
set @fullname = @Fstring + ' ' + @Lstring 
return (cast(@date as varchar(20))[email protected]) 
end 

执行:

select [dbo].[ufn_function_4]('Fred','Van Vliet'); 

输出:

Apr 2 2015 4:36AMFred Van Vliet 

但是,如果你想返回multiplerecordsfields那么在这种情况下,你需要使用表值功能change the return type作为表格:

CREATE FUNCTION ufn_function_4 
( 
    @Fstring varchar(20) , @Lstring varchar(20) 
) 
RETURNS @table TABLE ([date] DATETIME, fullname VARCHAR(100)) 
AS 
BEGIN 

    Declare @date datetime = getdate() 
    Declare @fullname varchar(100) 
    set @fullname = @Fstring + ' ' + @Lstring 

    INSERT INTO @table 
     SELECT @date, @fullname 

    RETURN 

运行它想:

SELECT * FROM ufn_function_4('Fred','Van Vliet') 

输出:

date       fullname 
April, 02 2015 05:11:38  Fred Van Vliet