返回表值函数的类型

时间:2015-01-29 07:40:56

标签: sql-server tsql user-defined-functions

如果我的Table-Valued函数的返回类型是我现有的表之一,比如TBL,我是否还需要在函数签名中写入所有列名,类型和长度,或者有没有办法说这个函数返回表TBL?

一个简单的例子:假设我有一个带有两个字段的表TBL(我正在使用的实际表格要宽得多):

TBL
{
    ID int NOT NULL
    Name varchar(100) NOT NULL
}

我的表值函数对表执行一些复杂的过滤,并返回符合行而没有任何列投影,即返回整行。目前该功能如下:

CREATE FUNCTION GetHistory
(
   --some params
)
RETURNS 
@RetVal TABLE                             <<<<<
(                                         <<<<<
    ID int NOT NULL,                      <<<<<
    Name varchar(100) NOT NULL            <<<<<
)                                         <<<<<
AS
BEGIN
    --Logic here
    RETURN;
END

如您所见,我正在RETURNS子句中复制表格的整个结构。有没有办法让我能告诉SQL Server这个函数返回TBL结构而不是在这里写所有列?类似的东西:

CREATE FUNCTION GetHistory
(
   --some params
)
RETURNS 
@RetVal TBL                               <<<<<<<
AS
BEGIN
    --Logic here
    RETURN;
END

(目标平台是SQL Server 2008 R2及更高版本)

1 个答案:

答案 0 :(得分:0)

您可以重写为:

CREATE FUNCTION GetHistory()
RETURNS TABLE
AS

RETURN
    SELECT  ID, Name
    FROM    TableName

EF:

        var ee = new Entities();
        var c = ee.GetHistory().ToList;

ADO:

var conn = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString;

                using (var connection = new SqlConnection(conn))
                {

                    string sqlSelect = "SELECT * FROM dbo.GetHistory()";
                    connection.Open();

                    SqlDataAdapter da = new SqlDataAdapter(sqlSelect, conn);
                    DataTable dt = new DataTable();
                    da.Fill(dt);
                }