不带长度的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)