SQL存储过程参数没有长度

时间:2012-02-26 17:18:22

标签: sql stored-procedures

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

CREATE PROCEDURE [TEST] 
    @Domain varchar,
    @Numbers int
AS
 .....

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

谢谢,

2 个答案:

答案 0 :(得分:3)

如果省略长度,则为defaults to one character 例如:varcharvarchar(1)的同义词。

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

create type Domain from varchar(30) not null;

然后,您可以在其他定义中使用此新类型:

create procedure TestProcedure @par1 domain as select @par1
go
create table TestTable (col1 domain)

但是,如果不删除使用它的所有内容,则无法更改类型的定义。

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

答案 1 :(得分:1)

我只是猜测你在这里使用SQL Server,在这种情况下你可以指定varchar(max)而不是指定特定的长度。作为the documentation for SQL Server notes,未指定的长度被视为长度为1。

其他数据库没有表现出相同的行为。例如,PostgreSQL将未指定的长度视为最大长度。

请注意,varchar(x)或(ANSI标准)character varying(x)在数据库之间非常兼容。