假设我在表中有一堆varchar(6000)字段,并希望将它们更改为文本字段。参数是varchar(6000)类型的存储过程的后果是什么?每个存储过程是否还需要更改这些参数数据类型?
答案 0 :(得分:4)
SQL Server 2005及更高版本中的文本字段为deprecated。如果可能,您应该使用varchar(MAX)。如果您希望在存储过程的参数中传递超过6000个字符,则还需要更改它们。
答案 1 :(得分:2)
在SQL Server中使用文本字段非常粗略。您实际上不能声明text类型的局部变量(除了作为存储过程的参数),并且大多数字符串操作函数不再适用于文本字段。
此外,如果您有触发器,则文本字段不会出现在INSERTED或DELETED表中。
基本上,如果该字段只是从程序中保存数据并且您没有操纵它,那么没什么大不了的。但是如果你有存储过程来操作字符串,那么你的任务就会变得更加困难。
正如tvanfosson所提到的,如果您使用SQL Server 2005使用VARCHAR(MAX),那么您将获得文本字段的长度,并能够像操作VARCHAR一样操作它。
答案 2 :(得分:1)
其他答案是正确的,但他们没有回答你的问题。 Varchar(max)是要走的路。如果您创建了feilds varchar(max)/ text,但保持存储的proc参数相同,则通过存储过程进入的任何字段都将被截断为6000个字符。既然你说它永远不会超过它,你会没事的,直到当然情况并非如此。它不会引发错误。它只是截断。
我不确定varchar(max)与文本的确切行为,但我很确定,一旦你开始将很多它们放在一个表中,你就会得到一些疯狂的性能命中。为什么一张桌子上有这么多大片?
答案 3 :(得分:0)
文本字段使用的原因是一行中的所有varchar(6000)字段都超过了最大行长度。文本字段只是在行中存储指针,因此不超过SQL Server最大行长度8000。 ATM数据库无法规范化。数据不会被刚插入,更新和删除的存储过程操纵。
VARCHAR(MAX)的行为类似于文本字段,只存储指向行中数据的指针吗?