【问题标题】:How to call table valued function inside select Statement?如何在 select 语句中调用表值函数?
【发布时间】:2014-11-28 05:49:34
【问题描述】:

我创建了表值函数。 我是这样打电话的

select * from dbo.fun_sample(1)

它工作正常。我有一个名为 Emp 的表

Table Emp

Id Name Lname
1  Rani Kale

我的select语句是这样的

Select id,Name,Lname from Emp

通过将 id 的值传递给函数,我想要获取表(有 2 列)。但是不工作

Select id,Name,Lname,(select * from dbo.fun_sample(1)) from Emp

【问题讨论】:

  • 从 fun_sample(1) 返回的结果是什么?
  • 如果它是一个表值函数,那么你必须将它用作连接。你不能直接在select语句中使用它
  • 表值函数返回一个表,可以在sql查询中用作表。所以也许你可以使用Emp
  • 如果答案有助于标记问题已回答

标签: sql asp.net


【解决方案1】:

使用交叉应用

Select e.id,e.Name,e.Lname from Emp e
CROSS APPLY dbo.fun_sample(1)

【讨论】:

    【解决方案2】:

    我不确定您的 UDF 架构是什么样的,但这样的事情应该会为您指明正确的方向。

    SELECT *
    FROM Emp
        CROSS APPLY dbo.fun_sample(1)
    

    虽然用表中的某些列替换 1 确实更有意义。除此之外,我不确定我是否了解您要查找的内容,我需要更多信息。

    最终,您最初提到的方法是尝试将多个列(和行,就此而言)存储在单个列中。这在 TSQL 中是不可能的。此处使用的 CROSS APPLY 可以比作调用 INNER JOIN,除非连接是针对为每一行计算的数据。

    如果您的1 是故意的,则使用INNER JOIN 即可。

    SELECT *
    FROM Emp
        INNER JOIN dbo.fun_sample(1) udf ON Emp.[column1] = udf.[column2]
    

    再一次,如果没有架构或您的 UDF,我无法给出一个可行的示例。

    【讨论】:

      【解决方案3】:
      Select e.id,e.Name,e.Lname,f.id,f.Name,f.Lname from Emp e
      CROSS APPLY dbo.fun_sample(1) as f
      

      【讨论】:

        猜你喜欢
        • 2014-03-12
        • 2015-09-17
        • 1970-01-01
        • 1970-01-01
        • 2013-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-20
        相关资源
        最近更新 更多