假設我在表中有一堆varchar(6000)字段,並且希望將它們更改爲文本字段。什麼是參數類型爲varchar(6000)的存儲過程的後果。每個存儲過程是否也需要更改這些參數數據類型?SQL Server存儲過程參數類型轉換
回答
SQL Server 2005及更高版本中的文本字段爲deprecated。如果可能的話,你應該使用varchar(MAX)。如果您希望在存儲過程的參數中傳遞超過6000個字符,則還需要更改它們。
在SQL Server中,文本字段很粗糙。你不能實際聲明類型爲text的局部變量(除了作爲存儲過程的參數),並且大多數字符串操作函數不再適用於文本字段。
此外,如果您有觸發器,文本字段將不會出現在INSERTED或DELETED表中。
基本上,如果該字段只是保存程序中的數據,而不是操縱它,那麼沒什麼大不了的。但是如果你有存儲過程來操縱字符串,那麼你的任務將會變得更加困難。
由於tvanfosson提到,如果你有SQL Server 2005使用VARCHAR(MAX),那麼你得到的文本字段的長度有能力操縱它,就像它是一個VARCHAR。
文本字段使用的原因是一行中的所有varchar(6000)字段都超過了最大行長度。文本字段只是在行中存儲一個指針,因此不超過SQL Server最大行長度爲8000的東西。 ATM數據庫無法正常化。數據不會被剛剛插入,更新和刪除的存儲過程操縱。
VARCHAR(MAX)的行爲類似於文本字段,只存儲指向行中數據的指針嗎?
其他答案是正確的,但他們不回答你的問題。 Varchar(max)是要走的路。如果您創建了feilds varchar(max)/ text,但保存的proc參數相同,則通過存儲過程進入的任何字段將被截斷爲6000個字符。既然你說它永遠不會超過這個數字,你會沒事的,直到當然情況並非如此。它不會拋出錯誤。它只是截斷。
我不確定varchar(max)對文本的確切行爲,但我確信一旦你開始把它們放在一個表中,你可以得到一些瘋狂的性能點擊。爲什麼在一張桌子上有這麼多大字段?
- 1. SQL Server存儲過程 - 轉換錯誤
- 2. 存儲過程中參數的條件數據類型轉換
- 3. 將SQL Server存儲過程轉換爲Oracle存儲過程
- 4. 將SQL Server存儲過程轉換爲PostgreSQL存儲過程
- 5. SQL Server存儲過程參數 - 不同類型
- 6. sql server存儲過程 - 位類型
- 7. SQL Server存儲過程 - 參數
- 8. SQL Server存儲過程參數
- 9. SQL Server存儲過程參數分配
- 10. SQL Server CLR存儲過程JSON參數
- 11. SQL Server存儲過程 - 輸出參數
- 12. SQL Server:參數化存儲過程
- 13. SQL Server存儲過程參數
- 14. SQL Server存儲過程參數輸出
- 15. 如何將具有參數的SQL Server存儲過程轉換爲具有參數的Oracle存儲過程?
- 16. 將數據類型varchar轉換爲浮動SQL Server存儲過程出錯
- 17. 將存儲過程從SQL Server 6.5轉換爲SQL Server 2008
- 18. 使用SQL函數將SQL Server存儲過程轉換爲LINQ
- 19. 存儲過程參數類型
- 20. SQL Server存儲過程的參數的數據類型的錯誤
- 21. 轉換成VARCHAR在數字SQL Server存儲過程
- 22. 在sql server 2008中使用表類型輸入參數調用存儲過程
- 23. SQL存儲過程轉換日期參數
- 24. Mysql存儲過程列類型參考
- 25. 存儲過程SQL Server
- 26. Sql server存儲過程
- 27. SQL Server存儲過程sp_executesql
- 28. sql server 2000存儲過程
- 29. SQL Server 2005存儲過程
- 30. 與SQL Server存儲過程