如何在sql serve中为列标题指定标量函数的返回值

时间:2018-02-07 07:19:28

标签: sql sql-server

我在sql函数中定义了一个函数,它输入3个名称(三个varchars)并输出一个名称(一个varchar)'。我唯一想要的是给这个返回值一个名称/列名。

现在我打电话给我的功能:

select concat_names(@first_name, @middle_name,@last_name)

我看到返回的varchar的没有列名

这是完整的代码:

if object_id('[co1].[concat_names]') is not null
    drop function [co1].[concat_names];
go
create function [co1].[concat_names]
(
    @first_name varchar(20),
    @middle_name varchar(20),
    @last_name varchar(20)
)
returns varchar(62)
as
begin
    declare @full_name varchar(62)
    set @full_name = @first_name;
    if(@middle_name is not null)
    set @full_name = @full_name + ' ' + @middle_name;
    if(@last_name is not null)
    set @full_name = @full_name + ' ' + @last_name;
    return @full_name;
end
go

当我这样做时:

select concat_names('A', 'B', 'C')

我在结果集中没有列名。 我知道我可以在上面的select query中返回没有列名后重命名列名。

我只想知道,如果有任何方法我可以在从

返回值时命名列

3 个答案:

答案 0 :(得分:5)

试试这个:

select fullname(@fn, @mn,@ln) AS 'yourName'

您可以创建表值函数来返回带有名称的列,例如:

create function udf_ParseDate (
 @date as datetime
) returns @dateinfo table (
 id int identity(1,1),
 [date] datetime,
 [year] int,
 [month] smallint,
 [day] smallint
)
as
begin
 insert into @dateinfo
 select @date, YEAR(@date), MONTH(@date), DAY(@date)

 return;
end

在您的代码中:

if object_id('[co1].[concat_names]') is not null
    drop function [co1].[concat_names];
go
create function [co1].[concat_names]
(
    @first_name varchar(20),
    @middle_name varchar(20),
    @last_name varchar(20)
)
returns returns @info table (
   fullName varchar(256)
)
as
begin
    declare @full_name varchar(62)
    set @full_name = @first_name;
    if(@middle_name is not null)
    set @full_name = @full_name + ' ' + @middle_name;
    if(@last_name is not null)
    set @full_name = @full_name + ' ' + @last_name;
    insert into @info select @full_name;
    return;
end
go

答案 1 :(得分:2)

这样做:

var req = new ActiveXObject("Microsoft.XMLHTTP");

创建这样的函数:

SELECT fullname(@fn, @mn,@ln) AS COLUM_NAME_YOU_WANT

答案 2 :(得分:0)

SQL Server中的标量值函数无法找到您要查找的内容。即使是默认的SQL Server Scalar值函数也会返回 (无列名)

的数据

例如

 select Checksum('somedata')

输出

    (No column name)
 ---------------------
    -1791257452

我不确定为什么你希望列名来自函数,如果你可以使用别名,你得到的好处是什么?

如果你只是想知道它是否可能,那么答案就是“不”。

只有您拥有的选项是使用AS的别名,例如follwong。

SELECT fullname(@fn, @mn,@ln) AS FullName