2010-09-06 50 views
0

我剛剛在SQL 2008中使用遊標,但我遇到了一些問題。 第一個是,我每次執行查詢時都會聲明遊標,這會給我一個錯誤。其中說這個名字的遊標已經存在。我想爲我提供一種方法,如果遊標存在不創建它,如果它尚未定義,但sql創建它。我廣告說我已經關閉並釋放了代碼末尾的光標,但問題仍然存在。遊標和打印功能和光標問題

declare c1 cursor fast_forward for select CustomerID, [Customer Name], [Product Name], 
Maximum from favorit; 
open c1 
fetch next from c1 into @custID, @custName, @prodName, @max; 
while @@FETCH_STATUS = 0 
begin 
PRINT @CustID, @custName; 
fetch next from c1 into @custID, @custName, @prodName, @max; 
end 
close c1 
deallocate c1 

我有在SQL下面

PRINT @CustID, @custName; 

無效約打印功能的另一個問題?什麼是SQL語法,以及我們如何可以打印幾個變量在SQL,如果可能的話,請提出一個方法精讀貓兩個變量和一些字符串它們之間例如象下面這樣:

print @custID + 'this is the customer name' + @custName + 'etc' 

只是一個其它問題每一行我打印我想打印一行例如數有些事情是這樣的:
1客戶名客戶ID ...
2客戶名客戶ID ...
...光標
末 。
你會如何提供實現並在光標 的while語句中打印這些數字?

回答

2

這不是真的清楚你想要做什麼。爲什麼不直接運行查詢來一次獲得所有結果,然後使用客戶端代碼來格式化並顯示數據?

select CustomerID, [Customer Name], [Product Name], Maximum from favorit 

您可以使用ROW_NUMBER()函數中添加行號,如果你想,或者你目前的輸出他們的客戶端應用程序數量。

接下來,PRINT是一個語句,而不是一個函數。它只能打印一個字符串,所以你需要建立並打印字符串。你的第二個例子可能實際工作,但是你必須要處理任何數據類型不同:

print cast(@custID as varchar(10)) + 'this is the customer name' + cast(@custName as varchar(100)) + 'etc' 

最後,直接從TSQL格式和打印數據通常,你做錯事的標誌。通常的做法是將結果集返回給客戶端應用程序,讓客戶端應用程序對其進行格式化,打印,將其轉換爲PDF或其他格式。你的應用程序可能是一個小的Perl腳本,一個完整的報告解決方案,或者介於兩者之間的任何東西,但是PRINT並不是一個很好的呈現數據的機制。

0

您可以聲明光標一次在頂部。然後在需要時打開它。 「打開」命令導致從數據庫中檢索新數據。

然後打印語法是這樣的:

print 'my custI is %1!, custName is %2!', @custId, @custName 
+0

SQL服務器說,在打印行有'''這個實際上是不正確的語法:@custId – user435245 2010-09-06 08:40:50

+0

我只是想讓我的代碼點擊一下運行,我正在尋找一些像這樣的事情網站創建視圖。有一個名爲object_id的函數,用於查看視圖的對象是否已創建,或者我們是否使用它來查看它是否爲空,然後刪除視圖並創建一個新視圖。我無法對光標做同樣的事情。你會提供一種方式嗎?非常感謝 – user435245 2010-09-06 08:46:12

+0

PRINT在TSQL中不能這樣工作:它不直接支持變量插值。 – Pondlife 2010-09-06 09:04:27