繁体   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