2012-05-28 44 views
1

我有一個動態生成表的數據庫。我正在寫一個存儲過程來執行對生成的表的查詢,我需要在查詢分析器工具(或類似的)中查看結果。如何使用MSSQL在存儲過程中加入多個選擇?

我目前擁有的是:

DECLARE @TableName sysname 

DECLARE TableNameCursor CURSOR FOR 
SELECT TableName FROM [xxxTables] WHERE xxx... 

OPEN TableNameCursor 
FETCH NEXT FROM TableNameCursor INTO @TableName 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    DECLARE @Query nvarchar 
    SET @Query = 'SELECT * FROM ' + @TableName 
    EXEC sp_executesql @Query 

    -- This is executed as long as the previous fetch succeeds. 
    FETCH NEXT FROM TableNameCursor INTO @TableName 
END 

但是,當我有多個選擇,我沒有得到的輸出。我如何修復存儲過程以顯示結果?

所有表都具有相同的佈局,所以我可以加入他們的行列。

+0

*'所有的桌子都有相同的佈局,所以我可以加入他們。'* - 你的意思是*** UNION **他們*嗎? –

+0

我的意思是,我可以創建輸出作爲單個表 –

+0

好吧。在哪裏你沒有得到輸出(我的意思是,它在客戶端應用程序或另一個存儲過程或...)? SP如何調用? –

回答

2

除非這只是在這裏張貼的腳本時產生一個錯字,可能我終於找到了問題。您還沒有指定用於@Query變量的最大長度:

DECLARE @Query nvarchar 

在這種情況下的最大長度缺省值爲1,按照the manual

n在未指定被數據定義或變量聲明語句,默認長度爲1。如果沒有使用CAST函數指定n,則默認長度爲30

當你指定一個查詢字符串來@Query,它只存儲第一個字符。自然,當你稍後嘗試執行查詢時,它不會返回任何內容,而應該產生一個錯誤。

您可以通過指定的最大長度固定。在SQL Server 2005或更高版本,它可能是一個明確的號碼(最多4000)或max

DECLARE @Query nvarchar(max) 

在早期版本中是不支持max,所以只使用一個明確的數字:

DECLARE @Query nvarchar(4000) 
+0

謝謝! :)這是問題,你救了我的一天;) –