0

我想創建一個存儲過程,需要一個簡單的SELECT語句並返回結果集爲CSV字符串。所以基本的想法是從用戶輸入中獲取sql語句,使用EXEC(@stmt)運行它並使用遊標將結果集轉換爲文本。然而,由於SQLServer的不允許:如何創建一個UDF,需要一個查詢字符串,並返回查詢的結果集

  • SELECT * FROM StoredProcedure的(@sqlStmt)
  • UDF與EXEC(@sqlStmt)

所以我試圖插入到#tempTable EXEC(@sqlStmt ),但這不起作用(error =「invalid object name #tempTable」)。

我卡住了。你能否介紹一下這件事?

非常感謝

編輯:

其實輸出(如CSV字符串)並不重要。問題是我不知道如何將遊標賦值給由EXEC返回的結果集。 SP和UDF在創建臨時表時無法與Exec()一起使用,因爲在不知道輸入語句的情況下插入值是不可能的。

我想到OPENQUERY,但它不接受變量作爲參數。

+1

「如何跑步」 - 站起來快速行走。繼續提高速度,你很快就會發現自己在跑步!提示:下次選擇更好的標題! – Cerebrus 2009-04-24 16:51:00

回答

0

您需要創建與同一列的臨時表的東西插入到它之前的存儲過程返回。

但是,輸出到CSV聽起來不像一個特別適合SQL的作業。您是否僅限於使用存儲過程來執行此操作,還是可以編寫腳本或程序來獲取結果並以CSV格式存儲?這可能是一個更簡單的方法。

0

如果我沒有記錯,你要接受一個SELECT statment並返回結果,optionaly爲CSV存儲過程。

所以EXEC prExecute '從TableA的SELECT *' 是你想叫什麼? 這是相當東:

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

但我不明白這裏的光標的需要。

相關問題