2016-02-25 58 views
0

使用下面的代碼(我發現 here),正在創建一個具有2000萬行的變量。我在哪裏可以找到存儲的變量。我能夠找到我創建的表,但這個特定的變量是不可見的。如何檢索sql服務器中聲明的變量

我的最終目標是將此變量及其值以CSV格式導出。我如何做到這一點。

Declare @p_NumberOfRows Bigint 

--We need 20 million rows 

Select @p_NumberOfRows=20000000; 

With Base As 
(
Select 1 as n 
Union All 
Select n+1 From Base Where n < Ceiling(SQRT(@p_NumberOfRows)) 
), 
Expand As 
(
Select 1 as C 
From Base as B1, Base as B2 
), 
Nums As 
(
Select Row_Number() OVER(ORDER BY C) As n 
From Expand 
) 
Select n from Nums Where n<[email protected]_NumberOfRows 

--Remove Maximum Recursion level constraint 

OPTION (MaxRecursion 0); 
+1

變量未被存儲,因爲它們不是持久的。這意味着如果你想做更長久的事情,那麼你需要在你的代碼中做到這一點。 –

+1

您並未創建變量,而是生成結果集。 '@ p_NumberOfRows'是一個變量,但它只有一個值。以下是如何導出爲CSV的一次性事件:http://stackoverflow.com/questions/3169220/export-query-result-to-csv-file-in-sql-server-2008。要在代碼中實現重複性,請執行以下操作:http://dba.stackexchange.com/questions/23566/writing-select-result-to-a-csv-file –

+0

謝謝,絕對有幫助 – oivemaria

回答

1

很好,這取決於你如何處理你的應用程序中將要創建csv的結果集,似乎有幾種方法可行。

首先添加變量計數在選擇

Select n, @p_NumberOfRows as NumberOfRows from Nums Where n<[email protected]_NumberOfRows 

返回每一行或者你可以返回兩個結果集,一個與數據和一個與行變量

Select n from Nums Where n<[email protected]_NumberOfRows 
select @p_NumberOfRows as NumberOfRows 

數量或者你可以將行數變量存儲在一個包含run_Instance_Id和日期的表中,然後從中取出。只有當您需要查看特定運行時發送的某個未來日期的行數時才適用。

+0

或者您可以在存儲過程中進行換行並返回一個輸出參數。 –

+0

@DavidTMacknet,是的,只是不要把它放到返回參數中,因爲這些都是錯誤代碼的真正含義。 – HLGEM

+0

當然,在我的書中,@hlgem - 返回參數非常邪惡。 –