不带长度的SQL存储过程参数
我可以在存储过程中使用不带长度的SQL存储过程参数,sql,stored-procedures,Sql,Stored Procedures,我可以在存储过程中使用varchar参数而不声明其长度吗?例如,我想声明我的存储过程,如下所示: CREATE PROCEDURE [TEST] @Domain varchar, @Numbers int AS ..... 如果存储过程能够自动检测参数长度,对我来说就容易多了。在这种情况下,如果我更改了表中的列长度,我就不需要去更新所有使用该列的存储过程 谢谢,如果你省略了长度,它将被删除。 例如:varchar是varchar(1)的同义词 在一个位置定义长度的一种方法是
varchar
参数而不声明其长度吗?例如,我想声明我的存储过程,如下所示:
CREATE PROCEDURE [TEST]
@Domain varchar,
@Numbers int
AS
.....
如果存储过程能够自动检测参数长度,对我来说就容易多了。在这种情况下,如果我更改了表中的列长度,我就不需要去更新所有使用该列的存储过程
谢谢,如果你省略了长度,它将被删除。
例如:
varchar
是varchar(1)
的同义词
在一个位置定义长度的一种方法是a,如:
然后,您可以在其他定义中使用此新类型:
create procedure TestProcedure @par1 domain as select @par1
go
create table TestTable (col1 domain)
但是,如果不删除使用类型的所有内容,则无法更改类型的定义
根据我的经验,数据长度的更改很少,而且当它们发生时,很容易手动重构。因此,我坚持使用
varchar(x)
而不是类型
我只是猜测您在这里使用的是SQL Server,在这种情况下,您可以指定varchar(max)
,而不是指定特定的长度。如图所示,未指定的长度被视为长度1
其他数据库不显示相同的行为。例如,将未指定的长度视为最大长度
请注意,
varchar(x)
或(ANSI标准)字符变化(x)
在数据库中非常兼容。工作正常,如果所有varchar
参数都只有一个字符长….通过类似的扩展,是否要将@Numbers int
更改为@Numbers bigint
,因为如果将表中的值更改为bigint
,而不仅仅是int
,该怎么办?现有长度值应为实际上限;但是想想当你把一个列改长(外键、用户界面、可能的报告)时,你必须改变的所有事情,存储的进程是否接近成为最难找到和更新的最慢的事情?谢谢你的回答,我理解你的观点。+1似乎VARCHAR(MAX)
才是OP真正想要的
create procedure TestProcedure @par1 domain as select @par1
go
create table TestTable (col1 domain)