我有一个相对简单的网站,它使用php + mssql。我有各种存储过程,可以简单地插入和删除工作。我面临的问题是,我传入存储过程的许多参数与插入数据的列的长度相同。sql server存储过程使用varchar max作为参数
例如我有一个存储过程来注册一个用户。存储的过程有一个参数@USERNAME
和varchar(12)
作为类型。 USER
表中的列与该长度具有相同的类型。原则上这不是一个真正的问题。但我宁愿能够自由地更改列长度,而不必更改存储过程参数的长度。
由于mssql php驱动程序不支持它们,我无法使用表值参数。
我可以想象的唯一解决方案就是使用varchar(max)作为存储过程参数,但这被认为是不好的做法?
在我看来,存储过程参数应该反映底层的列类型。这将避免运行时截断错误并提供一个自我记录存储过程接口。 –
恕我直言,不要这样限制字段长度。磁盘空间很便宜,而且SQL Server速度很快,而且最重要的是......事情变化 –
要么使用参数sql资源IMO更适合版本控制,要么为数据库中的每个字段创建UDT。那么你只需要改变那里的定义来影响表和存储过程 – Mark