2012-09-14 26 views
4

在SQL Server(2008 R2),而不是這樣做:使用變量指定 '大小' 聲明時,VARBINARY

DECLARE @testVar VARBINARY(64); 

我想做到這一點:

DECLARE @varSize INT; 
SET @varSize = 64; 
DECLARE @testVar VARBINARY(@varSize); 

但我得到這個錯誤:

Incorrect syntax near '@varSize'.

我該如何做這樣的事情或強制SQL來評估@varSize?

+3

爲什麼?只需聲明最大大小(例如'8000'或'max')。不會浪費任何實際的存儲空間。 – GSerg

+0

你不能強制SQL去評估它,因爲處理實際上分兩個階段完成:1)編譯 - 所有的聲明都被編譯並且變量被分配並且默認值被設置,它被完成** ONCE **每個過程/包。 2)運行時 - 運行處理指令,每次運行過程/ SQL時都會發生這種情況。 'DECLARE ...'是編譯時間語句,'SET ...'是運行時語句。 –

+1

注意:'MAX'確實比'8000'低。 [參考](http://rusanu.com/2010/03/22/performance-comparison-of-varcharmax-vs-varcharn/) –

回答

8

對於一個變量,爲什麼不使用MAX?

DECLARE @testVar VARBINARY(MAX); 

這不是70年代了。你的系統可以處理它。事實上,如果你想做的可能是,我懷疑你會浪費更多的資源,而不是僅僅將變量聲明爲MAX。

+0

謝謝。這是過度優化綜合症打擊了我。而且我對現代數據庫還不夠了解 – pcantin