sql server存储过程使用varchar max作为参数

时间:2016-05-29 14:12:39

标签: php sql-server stored-procedures varchar

我有一个相对简单的网站,它使用php + mssql。我有各种存储过程,可以进行简单的插入和删除工作。我面临的问题是,我传入存储过程的许多参数与插入数据的列的长度相同。

例如,我有一个注册用户的存储过程。存储过程具有参数@USERNAME,其中varchar(12)为类型。 USERNAME表中的columnn USER与该长度具有相同的类型。原则上这不是一个真正的问题。但我宁愿能够自由地更改USERNAME列长度,而不必更改存储过程参数的长度。

我不能使用表值参数,因为mssql php驱动程序不支持它们。

我能想象的唯一解决方案是只使用varchar(max)作为存储过程参数,但这被认为是不好的做法吗?

1 个答案:

答案 0 :(得分:0)

简短回答:是的。

如果有人传入长度为2,147,483,647个字符的用户名,这意味着什么?通过使用varchar(max),你意味着它会没问题。

我同意@DanGuzman的评论。表格列的大小应该在第一位正确,然后参数和变量应相应地调整大小。如果你必须改变表格列的大小,那么你必须在其他地方传播这种变化 - 这是最佳实践方法。

正确调整表格列的大小并不容易 - 用户名应该多长时间? 12对我来说似乎很短,2,147,483,647肯定太长了 - 介于两者之间? ;)@JohnCappelletti也有一个有效的观点 - 与变更成本相比,存储和处理是便宜的,因此在调整大小时会更大。

如果varchar(max)不好,并且你不想遵循最佳实践,那么它是否存在中间立场?也许用10倍?足够高于实际尺寸但不过分的东西。

另外需要注意的是,无论您如何调整参数大小,都要进行静默截断或运行时截断错误 - 明确检查长度。