怎样用sql server自定义函数,实现动态的sql,返回一个table类型

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样用sql server自定义函数,实现动态的sql,返回一个table类型相关的知识,希望对你有一定的参考价值。

参考技术A 你的动态SQL是要通过传入的参数生成查询语句,然后由sp_executesql来执行吗?
如果是这样的话,那么自定义函数是无法实现的。因为,SQL
Server的自定义函数中不可以调用sp_executesql存储过程的。
参考技术B 编写一个表值函数
下面是一个不带输入参数的表值函数示例
create
function
tvpoints()
returns
table
as
return
(
select
*
from
tb_users
);

SQL Server中对存储过程的理解

  数据库的存储过程理解为,处理数据的子程序,写起来像函数,用起来像函数,在SQL Server中存储过程分为两大类,系统的和自定义的,系统的都放在master系统数据库中,自定义就是自己去写的,用DDL的相关语句即可,创建存储过程,就像函数一样,可以有参,也可以无参,无参的时候写起来很简单:

CREATE PROC hello
AS
    BEGIN
        /*....*/
    END
GO

执行的时候也是,只需要在自定义存储过程执行即可

EXEC hello

有参的时候写法也不陌生:

CREATE PROC hello_1 @n1 int
AS
    BEGIN
        //.....
    END
GO
EXEC hello_1 123
/*或者 EXEC hello_1 @n2=‘123‘*/

 

在执行的时候如果是批处理的第一条语句则可以将EXEC省略

在编写的时候,会有许多不同的需求,存储过程时没有返回值的,我们需要返回相关信息的时候就希望类似于C/C++一样传入指针或者引用,在SQL Server中实现的方式是在变量之后加上OUTPUT。

对参数进行修饰的属性还有很多:

VARYING 只适用于输出参数为Cursor变量,该参数由存储过程动态构造
参数=值 表示默认值
READONLY 修饰不能在存储过程中更新或者修改的参数,类似于C/C++的const
RECOMPILE  执行存储过程时重新编译

注意事项:

  自定义存储过程只能在当前数据库中创建,临时存储过程除外,临时存储过程在系统数据库tempdb创建

  存储过程创建成功之后,过程名在sysobjects中,语句文本存放在syscomment中

  自动执行存储过程是SQL Server在启动过程中自动执行的一些存储过程,这些存储过程都不能有参数的。

以上是关于怎样用sql server自定义函数,实现动态的sql,返回一个table类型的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在 SQL Server 中创建自定义动态数据掩码函数?

sql server 中如何查看自定义函数的源代码?

Flink SQL 如何实现列转行 ?

也来谈谈SQL SERVER 自定义函数~

sql server中,一栏位格式如:国家-省-城市-... 现在我要按照城市来筛选数据,怎么使用sql语句来实现?