2008-10-22 57 views
2

假設我在表中有一堆varchar(6000)字段,並且希望將它們更改爲文本字段。什麼是參數類型爲varchar(6000)的存儲過程的後果。每個存儲過程是否也需要更改這些參數數據類型?SQL Server存儲過程參數類型轉換

回答

4

SQL Server 2005及更高版本中的文本字段爲deprecated。如果可能的話,你應該使用varchar(MAX)。如果您希望在存儲過程的參數中傳遞超過6000個字符,則還需要更改它們。

2

在SQL Server中,文本字段很粗糙。你不能實際聲明類型爲text的局部變量(除了作爲存儲過程的參數),並且大多數字符串操作函數不再適用於文本字段。

此外,如果您有觸發器,文本字段將不會出現在INSERTED或DELETED表中。

基本上,如果該字段只是保存程序中的數據,而不是操縱它,那麼沒什麼大不了的。但是如果你有存儲過程來操縱字符串,那麼你的任務將會變得更加困難。

由於tvanfosson提到,如果你有SQL Server 2005使用VARCHAR(MAX),那麼你得到的文本字段的長度有能力操縱它,就像它是一個VARCHAR。

0

文本字段使用的原因是一行中的所有varchar(6000)字段都超過了最大行長度。文本字段只是在行中存儲一個指針,因此不超過SQL Server最大行長度爲8000的東西。 ATM數據庫無法正常化。數據不會被剛剛插入,更新和刪除的存儲過程操縱。

VARCHAR(MAX)的行爲類似於文本字段,只存儲指向行中數據的指針嗎?

1

其他答案是正確的,但他們不回答你的問題。 Varchar(max)是要走的路。如果您創建了feilds varchar(max)/ text,但保存的proc參數相同,則通過存儲過程進入的任何字段將被截斷爲6000個字符。既然你說它永遠不會超過這個數字,你會沒事的,直到當然情況並非如此。它不會拋出錯誤。它只是截斷。

我不確定varchar(max)對文本的確切行爲,但我確信一旦你開始把它們放在一個表中,你可以得到一些瘋狂的性能點擊。爲什麼在一張桌子上有這麼多大字段?