我可以在存储过程中使用varchar
参数而不声明其长度吗?例如,我想声明我的存储过程如下:
CREATE PROCEDURE [TEST]
@Domain varchar,
@Numbers int
AS
.....
如果存储过程可以自动检测参数长度,这对我来说要容易得多,在这种情况下,如果我更改了表格中的列长度,我将不需要更新所有使用此列的存储过程。
谢谢,
答案 0 :(得分:3)
如果省略长度,则为defaults to one character
例如:varchar
是varchar(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)
在数据库之间非常兼容。