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
函数中不能使用动态语句(exec)。如果确实需要动态语句,考虑用存储过程。
那动态拼接的sql语句就无法执行了吗?
动态拼接SQL需要用存储过程的实现。
如果函数中sql语句是动态生成的呢?该如何将sql语句的查询结果返回呢?
不行啊,"select * from tb_users"这样的语句,我直接建个视图就可以了,问题是sql语句是动态拼接成的, 比如说@sql是这个动态拼接的语句,那么怎么将这个@sql的查询结果作为返回值返回
都说了,函数里面不能EXEC 动态语句了,只能通过其他方法实现,比如存储过程。
我想法是这样的 select from uf() a, mytran b where a.id = b.id 存储过程无法起到这个函数的作用
实现表值函数很简单:
下面是一个不带输入参数的表值函数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
比如说@sql是这个动态拼接的语句,那么怎么将这个@sql的查询结果作为返回值返回
select
from uf() a, mytran b
where a.id = b.id
存储过程无法起到这个函数的作用