2012-02-26 4 views
1

길이를 선언하지 않고 저장 프로 시저에 varchar 매개 변수를 사용할 수 있습니까?길이가없는 SQL 저장 프로 시저 매개 변수

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

그것은 내가 것 내 테이블의 컬럼 길이를 변경 한 경우 저장 프로 시저가 자동으로이 경우, 매개 변수의 길이를 감지 할 수 있다면 나를 위해 훨씬 쉽게 예를 들어 나는 다음과 같이 내 저장 프로 시저를 선언하고 싶습니다 이 열을 사용하는 모든 저장 프로 시저를 업데이트하고 업데이트 할 필요가 없습니다.

, 당신은 길이를 생략하면

+0

모든'varchar' 매개 변수가 ** 정확히 한 문자 ** 길이라면 ** –

+0

비슷한 확장으로'@Number int'를'@Number bigint'를 사용하기 때문에 테이블에서 값을 'int'대신에 'bigint'로 변경하면 어떨까요? 기존 길이 값은 현실적인 상한선이어야합니다. 그러나 컬럼을 더 길게 (외래 키, UI, 잠재적 인 리포트) 변경할 때 변경해야하는 다른 모든 것들을 생각하고, 저장된 procs는 찾기 어렵고 가장 느린 것에 가깝습니다. – Seph

+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) 

을, 당신은 할 수 없습니다 유형을 사용하는 모든 것을 삭제하지 않고 유형의 정의를 변경하십시오.

내 경험상 데이터 길이 변경은 거의 발생하지 않으며, 발생하면 수동으로 리팩토링하기 쉽습니다. 따라서 type 대신 varchar(x)을 사용합니다.

1

여기서는 SQL Server를 사용하고 있다고 추측합니다.이 경우 특정 길이를 지정하는 대신 varchar(max)을 지정할 수 있습니다. the documentation for SQL Server notes으로 지정되지 않은 길이는 길이 1로 처리됩니다.

다른 데이터베이스는 동일한 동작을 나타내지 않습니다. 예를 들어 PostgreSQL은 지정되지 않은 길이를 최대 길이로 처리합니다.

varchar(x) 또는 (ANSI 표준) character varying(x)은 거의 모든 데이터베이스에서 호환됩니다.

+0

+1 'VARCHAR (MAX)'가 OP가 묻는 것 같습니다. – Seph

+0

고맙습니다. :) –

관련 문제