Параметр хранимой процедуры SQL без длины - PullRequest
1 голос
/ 26 февраля 2012

Могу ли я использовать varchar параметры в моей хранимой процедуре, не объявляя ее длину? Например, я хотел бы объявить мою хранимую процедуру следующим образом:

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

Мне намного проще, если хранимая процедура может автоматически определять длину параметра, в этом случае, если я изменил длину столбца в своей таблице, мне не нужно будет идти и обновлять все мои хранимые процедуры, использующие этот столбец.

Спасибо,

Ответы [ 2 ]

3 голосов
/ 26 февраля 2012

Если вы опустите длину, по умолчанию будет один символ .
Например: varchar является синонимом varchar(1).

Одним из способов определения длины в одном месте является тип , например:

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 голос
/ 26 февраля 2012

Я просто предполагаю, что вы используете SQL Server здесь, и в этом случае вы можете указать varchar(max) вместо указания конкретной длины.Как документация для SQL Server отмечает , неопределенная длина обрабатывается как длина 1.

Другие базы данных не демонстрируют такое же поведение.Например, PostgreSQL рассматривает неопределенную длину как максимальную длину.

Обратите внимание, что varchar(x) или (стандарт ANSI) character varying(x) в значительной степени совместимы между базами данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...