0

我想创建一个存储过程,它采用简单的 SELECT 语句并将结果集作为 CSV 字符串返回。所以基本思想是从用户输入中获取 sql 语句,使用 EXEC(@stmt) 运行它并使用游标将结果集转换为文本。但是,由于 SQLServer 不允许:

  • 从存储过程中选择 *(@sqlStmt)
  • 带有 EXEC 的 UDF(@sqlStmt)

所以我尝试插入#tempTable EXEC(@sqlStmt),但这不起作用(错误=“无效的对象名称#tempTable”)。

我被困住了。您能否对此事有所了解?

非常感谢

编辑:

实际上输出(例如 CSV 字符串)并不重要。问题是我不知道如何将游标分配给 EXEC 返回的结果集。SP 和 UDF 不能与 Exec() 一起使用,而在不知道输入语句的情况下,在插入值之前创建临时表是不可能的。

我想到了 OPENQUERY,但它不接受变量作为其参数。

4

2 回答 2

0

在插入之前,您需要创建与存储过程返回的列相同的临时表。

但是,输出到 CSV 听起来并不是特别适合 SQL 的工作。您是否仅限于使用存储过程,或者您可以编写脚本或程序来获取结果并存储在 CSV 中?这可能是一种整体上更容易的方法。

于 2009-04-24T16:51:22.707 回答
0

如果我没记错的话,您需要一个接受 SELECT 语句并返回结果的存储过程,可选为 CSV。

所以 EXEC prExecute 'select * from tablea' 是你想要调用的?那是相当东方:

CREATE PROC prExecute ( @sql varchar(2000))
AS
    EXEC (@sql);
GO

但我不明白这里需要光标。

于 2009-05-19T12:36:52.607 回答