2014-06-16 65 views
2

我有一個存儲過程,它使用幾個參數來構建我執行的動態查詢。查詢工作正常,但是,此過程將成爲Crystal Report的數據源,需要它可以引用的「靜態」SELECT with field names。 Crystal報表從Visual Basic應用程序中調用,並從應用程序獲取傳遞給它的參數。它又將參數傳遞給SQL Server存儲過程。SELECT fieldnames FROM動態SQL查詢

不知怎的,我需要

SELECT fieldname1, fieldname2 
FROM Exec(@MydynamcSQL) 

我建@MydynamcSQL後。這是一個複雜的應用程序,它根據年份訪問特定的表格,以及基於用戶的特定數據庫。我對SQL很陌生,所以也許還有其他方法可以使用,我不知道?

+2

什麼類型的數據庫,您使用的是? Microsoft SQL Server?什麼版本(年)?如果添加更具體的標籤,它將有助於回答問題,因爲這種類型的SQL非常依賴於數據庫的類型。 – Chipmonkey

+0

@Chipmonkey我認爲這是T-SQL,PL/SQL對動態sql有不同的語法。 – codemonkey

+0

Microsoft SQL Server 2008 R2 – user3746361

回答

0

你有沒有嘗試使誰的事情的動態,如:

Exec('SELECT fieldname1, fieldname2 FROM ' + @MydynamcSQL) 

值得注意的,雖然超出了範圍,確保你是不是vulnarable SQL注入攻擊。參數化的動態查詢可能會讓您暴露。

+0

我的問題是動態部分。當我附加存儲過程時,Crystal Reports沒有看到任何數據字段,所以我沒有任何東西可以構建報告。至於sql注入,我的[桌面]應用程序將傳遞我將建立的參數。該應用將擁有一個小型的內部用戶羣。 – user3746361

1

嘗試創建一個臨時表臨時插入數據,然後從該表中選擇:

DECLARE @MydynamcSQL varchar(1000); 

SET @MydynamcSQL = 'select fieldname1, fieldname1 from table1'; 

CREATE TABLE #Result 
(
    fieldname1 varchar(1000), 
    fieldname2 varchar(1000) 
) 
INSERT #Result Exec(@MydynamcSQL) 
SELECT fieldname1, fieldname1 -- here you have "static SELECT with field names" 
FROM #Result 
DROP TABLE #Result 
+0

我在想這條路線可能是我唯一的選擇。我會嘗試這個,看看它如何與水晶工程。 – user3746361

+0

我正在研究一段時間的報告,我想我知道你的問題,通常這些報告中的問題可以用臨時表來解決。這是一個粗糙的邊緣解決方案,如果我想到不同的東西,我會讓你知道。 – codemonkey

+0

如果我有幾個用戶同時運行此報表,SQL Server會爲每個用戶製作臨時表的唯一版本嗎? – user3746361