如果我的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及更高版本)
答案 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);
}