2009-07-15 52 views
14

我通常在我的SP聲明時的參數,如定義尺寸的影響:什麼是省略大小的nvarchar的聲明

@myParam nvarchar(size) 

,或者當我鑄造或轉換:

CAST(@myParam AS nvarchar(size)) 

最近我從像我CAST功能已經去掉大小:

CAST(@myParam AS nvarchar) 

,我有點擔心,如果是要來和咬我當監聽中心t expected :-(,因爲我注意到在使用遞歸CTE時在nvarchar變量上截斷並在沒有指定大小的情況下強制轉換nvarchar。

有何評論?

回答

18

如果省略大小,默認爲30,請參閱本:

http://msdn.microsoft.com/en-us/library/ms186939.aspx

要看到這個動作,嘗試執行以下語句:

--outputs: 123456789.098765432 
select cast (123456789.098765432 as nvarchar) 

--throws "Arithmetic overflow error converting expression to data type nvarchar." 
select cast (123456789.0987654321 as nvarchar) 

--outputs: 123456789.0987654321 
select cast (123456789.0987654321 as nvarchar(31)) 

每@克魯爾的評論; 30是CAST的默認長度;然而,對於一個數據定義或變量聲明的默認長度爲1

NB:也有一個STR功能,其將數字字段爲字符串,爲此,默認長度爲10

--outputs: 1234567890 
select str(1234567890) 

--outputs: ********** 
select str(12345678901) 

--outputs: 12345678901 
select str(12345678901,11) 
+0

謝謝,你能提供一些鏈接嗎? – krul 2009-07-15 13:48:30

4

它將設置大小設置爲默認大小並截斷其餘大小。這確實可能會咬你,除非默認大小合適。

事件然後,我會建議你總是指定大小,以清楚你認爲大小會是什麼,而不是讓讀取到代碼的下一個人來到SO來問什麼默認大小nvarchar是;)。