簡體   English   中英

SQL Server存儲的Proc參數類型轉換

[英]SQL Server Stored Proc Argument Type Conversion

假設我在表中有一堆varchar(6000)字段,並且想要將其更改為文本字段。 參數類型為varchar(6000)的存儲過程的后果是什么? 每個存儲過程是否還需要更改這些參數數據類型?

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

文本字段很難在SQL Server中使用。 實際上,您不能聲明文本類型的局部變量(作為存儲過程的參數除外),並且大多數字符串操作函數不再在文本字段上起作用。

同樣,如果您有觸發器,則文本字段將不會出現在INSERTED或DELETED表上。

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

正如tvanfosson提到的,如果您有SQL Server 2005,請使用VARCHAR(MAX),那么您將獲得文本字段的長度,並且可以像對待VARCHAR一樣對其進行操作。

其他答案是正確的,但它們不能回答您的問題。 Varchar(max)是必經之路。 如果您使字段為varchar(max)/ text,但保持存儲的proc參數不變,則通過存儲的proc進入的任何字段都將被截斷為6000個字符。 既然您說它將永遠不會超過此范圍,那么您會沒事的,當然,直到事實並非如此。 它不會引發錯誤。 它只是截斷。

我不確定varchar(max)詩句文本的確切行為,但是我很確定一旦開始將許多文本放在一張表中,就會受到瘋狂的打擊。 為什么一張桌子上有這么多大字段?

使用文本字段的原因是,一行中的所有varchar(6000)字段都超過了最大行長。 文本字段僅在行中存儲一個指針,因此不超過SQL Server最大行長8000。 無法對數據庫進行標准化的ATM。 數據不受剛剛插入,更新和刪除的存儲過程的操縱。

VARCHAR(MAX)是否像文本字段一樣僅在行中存儲指向數據的指針?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM