做一个表值函数,首先拼接一个sql语句(根据参数拼接的查询语句)
declare @sql varchar(4000)
拼接完@sql语句后,怎样把@sql查询结果表返回去,

解决方案 »

  1.   

    http://blog.csdn.net/fredrickhu/archive/2009/09/23/4583130.aspx
      

  2.   

    Sql server 的表值函数是返回一个Table类型,table类型相当与一张存储在内存中的一张虚拟表。
    实现表值函数很简单:
    下面是一个不带输入参数的表值函数create function tvpoints()
    returns table
    as 
    return
    (
    select * from tb_users
    );
    这个表值函数数查询所有用户表的数据对于多语句表值函数,在 BEGIN...END 语句块中定义的函数体包含一系列 Transact-SQL 语句,这些语句可生成行并将其插入将返回的表中。以下示例创建了一个表值函数.create function tvpoints()
    returns @points table (x float, y float)
    as begin
    insert @points values(1,2);
    insert @points values(3,4);
    return;
    end查询表值函数跟查询普通表一样
    select * from tvpoints()
    返回的是一张表带输入参数的表值函数create function tvpoints2(@x AS int,@y as int)
    returns @points table (x float, y float)
    as begin
    insert @points values(@x,@y);
    return;
    end本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fredrickhu/archive/2009/09/23/4583130.aspx
      

  3.   

    函数中不能使用动态语句(exec)。如果确实需要动态语句,考虑用存储过程。
      

  4.   

    那动态拼接的sql语句就无法执行了吗?
      

  5.   

    动态拼接SQL需要用存储过程的实现。
      

  6.   

    如果函数中sql语句是动态生成的呢?该如何将sql语句的查询结果返回呢?
      

  7.   

    不行啊,"select * from tb_users"这样的语句,我直接建个视图就可以了,问题是sql语句是动态拼接成的,
    比如说@sql是这个动态拼接的语句,那么怎么将这个@sql的查询结果作为返回值返回
      

  8.   

    都说了,函数里面不能EXEC 动态语句了,只能通过其他方法实现,比如存储过程。
      

  9.   

    我想法是这样的  
    select     
      from       uf()   a,   mytran   b   
      where     a.id   =   b.id 
    存储过程无法起到这个函数的作用
      

  10.   

    看来这样做好像是不成,函数无法通过拼凑sql语句然后返回表