我研究过并试过但是无法弄清楚这是我到目前为止所得到的。 我想要它做的是连接Fstring和Lstring并返回结果加上当前日期@date 我将变量@Fstring和@Lstring声明为输入,将@date声明为getdate函数。 我只能让它返回日期或@fullname :( 我无法弄清楚我错在哪里 任何正确方向的帮助将不胜感激
==== 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 (@date+@fullname)
end
go
==== start select ====
select [dbo].[ufn_function_4]('Fred','Van Vliet');
答案 0 :(得分: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)
你创建的函数是一个标量函数,除了以下几乎你做得很好:
1。增加返回类型的长度,除非您的函数返回最大长度为20的字符串
2:当你想用varchar值连接它时,将日期时间转换为varchar,除非你得到类型转换错误
3:在设置@file name
后删除分号我的意思是你的功能:
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))+@fullname)
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