SQL 存储过程参数没有长度

Osa*_*ada 2 sql stored-procedures

我可以varchar在我的存储过程中使用参数而不声明它的长度吗?例如,我想如下声明我的存储过程:

CREATE PROCEDURE [TEST] 
    @Domain varchar,
    @Numbers int
AS
 .....
Run Code Online (Sandbox Code Playgroud)

如果存储过程可以自动检测参数长度,对我来说就容易多了,在这种情况下,如果我更改了表中的列长度,我将不需要去更新所有使用此列的存储过程。

谢谢,

And*_*mar 5

如果省略长度,则默认为 1 个字符
例如:varchar是 的同义词varchar(1)

在一个地方定义长度的一种方法是type,例如:

create type Domain from varchar(30) not null;
Run Code Online (Sandbox Code Playgroud)

然后你可以在其他定义中使用这个新类型:

create procedure TestProcedure @par1 domain as select @par1
go
create table TestTable (col1 domain)
Run Code Online (Sandbox Code Playgroud)

但是,您不能在不删除使用它的所有内容的情况下更改类型的定义。

根据我的经验,数据长度更改很少见,而且当它们发生时,它们很容易手动重构。所以我会坚持varchar(x)而不是type.