sql-server 프로시저 명명 - SQL Server에서 함수 대 저장 프로 시저
SP와 UDF의 차이점은 다음과 같습니다.
+---------------------------------+----------------------------------------+
| Stored Procedure (SP) | Function (UDF - User Defined |
| | Function) |
+---------------------------------+----------------------------------------+
| SP can return zero , single or | Function must return a single value |
| multiple values. | (which may be a scalar or a table). |
+---------------------------------+----------------------------------------+
| We can use transaction in SP. | We can't use transaction in UDF. |
+---------------------------------+----------------------------------------+
| SP can have input/output | Only input parameter. |
| parameter. | |
+---------------------------------+----------------------------------------+
| We can call function from SP. | We can't call SP from function. |
+---------------------------------+----------------------------------------+
| We can't use SP in SELECT/ | We can use UDF in SELECT/ WHERE/ |
| WHERE/ HAVING statement. | HAVING statement. |
+---------------------------------+----------------------------------------+
| We can use exception handling | We can't use Try-Catch block in UDF. |
| using Try-Catch block in SP. | |
+---------------------------------+----------------------------------------+
나는 함수와 저장 프로 시저를 꽤 오랫동안 배웠지 만, 왜 함수와 저장 프로 시저를 사용해야하는지 모릅니다. 그들은 나에게도 똑같이 보일 것입니다. 아마도 그 일에 관해 초보자이기 때문일 것입니다.
어떤 이유로 말해 줄 수 있습니까?
다른 SQL 문에서 사용할 값을 계산하고 반환하려는 경우 사용자 정의 함수를 작성하십시오. 복잡한 SQL 문 집합을 그룹화하는 것이 필요할 때 저장 프로 시저를 작성하십시오. 결국 두 개의 꽤 다른 사용 사례입니다.
기본 차이점
함수는 값을 반환해야하지만 저장 프로 시저에서는 선택 사항입니다 (프로 시저는 0 또는 n 값을 반환 할 수 있음).
프로시 저는 입력 / 출력 매개 변수를 가질 수있는 반면, 함수는 입력 매개 변수 만 가질 수 있습니다.
함수는 하나의 입력 매개 변수를 취하지 만 필수적이지만 저장 프로 시저는 n 개의 입력 매개 변수를 취할 수 있습니다.
프로 시저에서 함수를 호출 할 수있는 반면 함수에서는 프로 시저를 호출 할 수 없습니다.
사전 차이
프로시 저는 SELECT와 DML (INSERT / UPDATE / DELETE) 문을 허용하지만 Function은 SELECT 문만 허용합니다.
SELECT 문에는 프로 시저를 사용할 수 없지만 SELECT 문에는 함수를 임베드 할 수 있습니다.
저장 프로시 듀어는 WHERE / HAVING / SELECT 절의 SQL 문에서 사용할 수 없지만 Function은 사용할 수 있습니다.
테이블을 반환하는 함수는 다른 행 집합으로 취급 될 수 있습니다. 이것은 다른 테이블과의 JOIN에서 사용될 수 있습니다.
인라인 함수는 매개 변수를 취하는 뷰로 사용할 수 있으며 JOIN 및 다른 행 집합 작업에서 사용할 수 있습니다.
프로 시저에서 try-catch 블록으로 예외를 처리 할 수있는 반면 try-catch 블록은 함수에서 사용할 수 없습니다.
프로 시저에서는 트랜잭션 관리를 사용할 수 있지만 함수에서는 사용할 수 없습니다.
저장 프로시 저는 스크립트로 사용됩니다 . 그들은 일련의 명령을 실행하고 특정 시간에 실행되도록 일정을 잡을 수 있습니다.
함수 는 메소드로 사용됩니다. 당신은 그것을 무언가를 전달하고 결과를 리턴합니다. 작고 빨라야합니다. 즉석에서 할 수 있습니다.
저장 프로 시저 :
- SQL Server의 축소 형 프로그램과 같습니다.
- select 문과 같이 간단하거나 데이터베이스의 여러 테이블에서 데이터를 추가, 삭제, 업데이트 및 / 또는 읽는 긴 스크립트만큼 복잡 할 수 있습니다.
- (루프와 커서를 구현할 수 있습니다. 둘 다 작은 결과를 처리하거나 데이터를 행 단위로 조작 할 수 있습니다.)
-
EXEC
또는EXECUTE
문을 사용하여 호출해야합니다. - 테이블 변수를 반환하지만
OUT
매개 변수는 사용할 수 없습니다. - 트랜잭션을 지원합니다.
기능:
- 데이터베이스를 갱신, 삭제 또는 레코드에 추가하는 데 사용할 수 없습니다.
- 단일 값이나 테이블 값을 반환하기 만하면됩니다.
레코드를 선택하는 데에만 사용할 수 있습니다. 그러나 다음과 같이 표준 SQL 내에서 매우 쉽게 호출 할 수 있습니다.
SELECT dbo.functionname('Parameter1')
또는
SELECT Name, dbo.Functionname('Parameter1') FROM sysObjects
단순한 재사용 가능한 선택 작업의 경우 함수가 코드를 단순화 할 수 있습니다. 함수에서
JOIN
절을 사용하는 것에 조심하십시오. 함수에JOIN
절이 있고 여러 결과를 리턴하는 다른 select 문에서 호출하는 경우 해당 함수 호출은 결과 세트에 리턴 된 각 행에 대해 해당 테이블을 함 2JOIN
합니다. 따라서 일부 논리를 단순화하는 데 도움이 될 수 있지만 제대로 사용하지 않으면 성능 병목 현상이 될 수 있습니다.-
OUT
매개 변수를 사용하여 값을 리턴합니다. - 거래를 지원하지 않습니다.
SQL Server 기능은 커서와 마찬가지로 마지막 무기로 사용됩니다. 그들은 성능 문제가 있으므로 테이블 값 함수를 사용하는 것은 가능한 한 피해야합니다. 성능에 관해 이야기하는 것은 중산층 하드웨어의 서버에서 호스팅되는 1,000,000 개가 넘는 레코드가있는 테이블을 말하는 것입니다. 그렇지 않으면 함수로 인해 발생하는 성능에 대해 걱정할 필요가 없습니다.
- 함수를 사용하여 결과 세트를 외부 코드 (예 : ADO.Net)로 리턴하지 마십시오.
- 가능한 한보기 / 저장된 procs 조합을 사용하십시오. DTA (Database Tuning Adviser)가 제공하는 제안 (인덱싱 된 뷰 및 통계와 같은)을 사용하여 향후 성장 성능 문제를 복구 할 수 있습니다 - 때로는!
자세한 내용은 http://databases.aspfaq.com/database/should-i-use-a-view-a-stored-procedure-or-a-user-defined-function.html 참조하십시오.
- 함수가 저장 프로 시저가 아닌 동안 값을 반환해야하는 것은 필수입니다.
- Select 문은 UDF에서만 허용되며 DML 문은 필요하지 않습니다.
- 저장 프로시 저는 DML 문은 물론 모든 문을 허용합니다.
- UDF는 입력 만 허용하고 출력은 허용하지 않습니다.
- 저장 프로시 저는 입력과 출력을 모두 허용합니다.
- 캐치 블록은 UDF에서 사용할 수 없지만 저장 프로시 듀어에서 사용할 수 있습니다.
- UDF의 기능에서는 허용되지 않지만 스토어드 프로 시저에서는 허용되는 트랜잭션이 허용되지 않습니다.
- UDF에서는 임시 변수가 아닌 임시 변수 만 사용할 수 있습니다.
- 저장 프로시 저는 테이블 변수와 임시 테이블을 모두 허용합니다.
- UDF는 저장 프로시 듀어가 함수를 호출 할 수있는 동안 저장 프로시 듀어를 함수에서 호출하는 것을 허용하지 않습니다.
- UDF는 조인 절에서 사용되지만 저장 프로 시저는 조인 절에서 사용될 수 없습니다.
- 저장 프로시 저는 항상 0으로 되돌릴 수 있습니다. 반대로, UDF는 미리 정해진 지점으로 되돌아 와야하는 값을 가지고 있습니다.
프로 시저가 할 수없는 select 문에서 함수를 사용할 수 있습니다.
저장 프로시 저는 입력 및 출력 매개 변수를 모두 사용하지만 함수는 입력 매개 변수 만 사용합니다.
함수는 text, ntext, image 및 timestamps 유형의 값을 프로 시저와 같이 반환 할 수 없습니다.
함수는 create table에서 사용자 정의 데이터 유형으로 사용할 수 있지만 프로 시저에서는 사용할 수 없습니다.
*** 예 : -create table <tablename>(name varchar(10),salary getsal(name))
여기서 getsal은 급여 유형을 반환하는 사용자 정의 함수이며, 테이블이 생성 될 때 급여 유형에 할당 된 저장 장치가 없으며 getsal 함수도 실행되지 않습니다. 그러나이 테이블에서 일부 값을 가져올 때 getsal 함수 get이 실행되고 반환 유형은 결과 집합으로 반환됩니다.