如何创建一个接受查询字符串并返回查询结果集的 UDF
Posted
技术标签:
【中文标题】如何创建一个接受查询字符串并返回查询结果集的 UDF【英文标题】:How to create a UDF that takes a query string and returns the query's resultset 【发布时间】:2009-04-24 16:46:58 【问题描述】:我想创建一个存储过程,它采用简单的 SELECT 语句并将结果集作为 CSV 字符串返回。所以基本思想是从用户输入中获取 sql 语句,使用 EXEC(@stmt) 运行它并使用游标将结果集转换为文本。但是,由于 SQLServer 不允许:
从存储过程中选择 *(@sqlStmt) UDF 与 EXEC(@sqlStmt)所以我尝试插入 #tempTable EXEC(@sqlStmt),但这不起作用(错误 = “无效的对象名称 #tempTable”)。
我被困住了。能否请您解释一下这个问题?
非常感谢
编辑:
实际上输出(例如 CSV 字符串)并不重要。问题是我不知道如何将游标分配给 EXEC 返回的结果集。 SP 和 UDF 不能与 Exec() 一起使用,而在不知道输入语句的情况下,在插入值之前创建临时表是不可能的。
我想到了 OPENQUERY,但它不接受变量作为参数。
【问题讨论】:
“如何跑步” - 站起来开始快速行走。不断提高速度,你很快就会发现自己在奔跑!提示:下次选择更好的标题! 您实际上是否已经编写过一个函数,该函数根据动态评估的任意 SQL 字符串返回 CSV? 【参考方案1】:在插入存储过程之前,您需要创建具有与存储过程返回的相同列的临时表。
但是,输出到 CSV 听起来并不是特别适合 SQL 的工作。您是否仅限于使用存储过程,或者您可以编写脚本或程序来获取结果并存储在 CSV 中?这可能是一种整体上更简单的方法。
【讨论】:
【参考方案2】:如果我没记错的话,您需要一个接受 SELECT 语句并返回结果的存储过程,可选的为 CSV。
所以 EXEC prExecute 'select * from tablea' 是您想要调用的? 那是相当东部:
CREATE PROC prExecute ( @sql varchar(2000))
AS
EXEC (@sql);
GO
但我不明白这里需要光标。
【讨论】:
以上是关于如何创建一个接受查询字符串并返回查询结果集的 UDF的主要内容,如果未能解决你的问题,请参考以下文章