从 .NET 调用表值 SQL 函数

Posted

技术标签:

【中文标题】从 .NET 调用表值 SQL 函数【英文标题】:Calling Table-Valued SQL Functions From .NET 【发布时间】:2010-09-05 18:10:42 【问题描述】:

可以从 .NET 调用标量值函数,如下所示:

SqlCommand cmd = new SqlCommand("testFunction", sqlConn); //testFunction is scalar
cmd.CommandType = CommandType.StoredProcedure;  
cmd.Parameters.Add("retVal", SqlDbType.Int);
cmd.Parameters["retVal"].Direction = ParameterDirection.ReturnValue;
cmd.ExecuteScalar();
int aFunctionResult = (int)cmd.Parameters["retVal"].Value;

我也知道表值函数可以用类似的方式调用,例如:

String query = "select * from testFunction(param1,...)"; //testFunction is table-valued
SqlCommand cmd = new SqlCommand(query, sqlConn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(tbl);

我的问题是,表值函数是否可以像标量值函数一样被称为存储过程? (例如,复制我的第一个代码 sn-p 并调用一个表值函数并通过 ReturnValue 参数获取返回的表)。

【问题讨论】:

@ChuckConway 为什么要从标题中删除 C#?考虑到 C# 标记,它是有效的……但该标记无济于事,无法显示在谷歌中。 【参考方案1】:

否,因为您需要选择它们。但是,您可以创建一个存储的 proc 包装器,这可能会破坏具有表函数的意义。

【讨论】:

我认为它不会真正破坏具有表值函数的意义。拥有 TVF 的一点是它们具有某些安全保证,而存储过程则没有。另一点是它们可以重用,而如果不简单地复制和粘贴,重用存储过程要困难得多。

以上是关于从 .NET 调用表值 SQL 函数的主要内容,如果未能解决你的问题,请参考以下文章

调用 T-SQL 表值函数比调用一次快多次?

sql2005中 表值函数是啥

sql2005中 表值函数是啥

sql server 怎样用select语句调用自定义表值函数

数据库原理与应用(SQL Server)笔记 第十章 用户定义函数

sql server 怎样用select语句调用自定义表值函数