从sql服务器中的函数返回多个值
问题描述:
我研究并尝试,但无法弄清楚这是我到目前为止。 我想要它做的是连接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');
答
改变这一行,你只有一个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。提高返回类型的长度,除非你的函数将返回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
但是,如果你想返回multiple
records
或fields
那么在这种情况下,你需要使用表值功能以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
您是否考虑过与一个或多个OUT参数写一个存储过程,而不是使用的功能? – 2015-04-02 08:58:15