저장 프로 시저 매개 변수가 너무 많습니까?


12

방금 SQL Server 2008에서 저장 프로 시저를 작성하기 시작했으며 30 개 이상의 매개 변수가 있습니다. 나는 ~ 10 개 이상의 매개 변수를 가진 것을 쓰지 않았습니다.

문맥 상이 절차는 본질적 으로 단일 행을 단일 테이블에 삽입 합니다. 또한 매우 유사 할 것입니다. 다소 작지만; 동일한 테이블 에서 UPDATE 를 수행하는 버전 . 대부분의 열은 int와 문자열이 혼합되어 비교적 작습니다 ( varchar(200)).

무엇이 문제입니까? 좋거나 나쁘거나; 많은 수의 매개 변수가있는 절차를 사용하고 다른 패턴을 고려하기 시작 해야하는 임계 값은 무엇입니까?


1
'가격을 물어봐야한다면 감당할 수없는'것과 정확히 같습니다. 너무 많은 매개 변수가 너무 많으면 궁금합니다. 주요 문제는 엔진이 아니라 인간 리더 / 코드 유지 관리자입니다. 따라서 자동으로 생성 된 코드에 최대한 많은 것을 가지고 있지만 괜찮은 것으로 작성 / 유지되는 코드를 합리적으로 유지하십시오.
레무스 루사 누

답변:


12

문제? 나는 아무 것도 주장하지 않을 것이다.

  • 한계는 2100 개의 매개 변수 입니다. IIRC SQL2000 이후 2100 년이되었지만 문서 오류로 인해 1024임을 제안했습니다.
  • 테이블에 1000 개의 열이 있고 ( 예 : Sharepoint-esque 스파 스 열 배열 로 인해 ) 저장 프로 시저를 통해 액세스를 수행하는 경우 삽입 프로 시저에 1000 개의 매개 변수가있을 수 있습니다. 아무 문제가 없습니다.
  • 넓은 테이블이있을 때 (30이 특히 넓은 것은 아님) 스키마를 검토하기 위해 일시 ​​중지하십시오. 일상화가 시작된 테이블을 찾는 것은 드문 일이 아니지만 게으름 및 / 또는 무결점을 통해 인식 이상으로 확장되었습니다.
  • 매개 변수 집합을 CSV 목록 또는 XML로 전달하는 것도 간단하게 고려하지 마십시오. 쿼리 최적화 프로그램을 차단하고 시간이나 노력을 아끼지 않습니다.
  • 많은 수의 매개 변수가있는 프로 시저를 호출하기 위해 클라이언트 코드를 직접 크랭크하지 마십시오. T4 템플릿 또는 CodeSmith 와 같은 코드 생성 도구 를 사용하십시오.

1
이 답변에 감사드립니다. 이것은 내 질문에 완벽하게 대답합니다. " fecklessness " 와 같은 훌륭한 글자 맞추기 단어를 사용하는 배지가없는 것은 너무 나쁩니다.
JoeGeeky

2

조 셀코 그가에서 자세히 씁니다 긴 매개 변수 목록의 옹호자이며, 두 부분으로 기사 :

가장 간단한 대답은 긴 매개 변수 목록을 사용하여 프로 시저 본문 내에 목록과 파생 테이블을 구성하는 것입니다. SQL Server는 최대 2100 개의 매개 변수를 처리 할 수 ​​있으며 실제 용도로는 충분해야합니다. SQL Server는 실제로 이와 관련하여 겁쟁이입니다. DB2; 32K 매개 변수를 전달할 수 있습니다. Oracle은 64K 매개 변수를 가질 수 있습니다.

긴 매개 변수 목록은 일반 오래된 매개 변수로 구성되어 출력뿐만 아니라 입력에도 사용할 수 있습니다. 또한 옵티마이 저가 사용할 하나의 명령문에 포함되어 있습니다.

이러한 기술이 항상 최상의 솔루션이라고 생각합니까? 당연히 아니지. SQL에는 그런 것이 없습니다. 그러나 적절한 문제가 발생하면 살펴볼 가치가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.